cocos2dx下的OpenGL学习总结.docx.doc

cocos2dx下的OpenGL学习总结.docx概要1

Objective: 1、了解cocos2dx渲染流程,学习如何在cocos2dx引擎下编写OpenGL代码 2、了解OpenGL的渲染管线,学习Vertex shader和Fragment shader的编写,学习shader与c++程序如何传做数据传递 作者:织法 在手游如雨后春笋般上线的今天,手游的同质化极其严重。不同游戏间差别可能只是一层皮,在这种情况下,一款游戏若想获得成功,就必须有所突破,图形就是一个很好的突破口。 在中国,Cocos2dx是当下最流行的2D手游开发引擎,其最大的优点之一就是开源。正因为这一特点,我们可以轻松的添加一些自己想要的效果,尤其在图形方面。 下面,我将讲解如何在cocos2dx下使用OpenGL。 目录 一. Cocos2dx的渲染流程 3 1.1 Node的Visite函数 3 1.2 Sprite的draw函数 6 1.3 render对象浅析 6 1.4 AutoBatch原理讲解 10 1.5 自定义RenderCommand 13 二. OpenGL简介 14 2.1 OpenGL 渲染管线 14 2.1.1 Vertex Shading 15 2.1.2 Primitive Assembly 15 2.1.3 Clipping 16 2.1.4 Rasterization 16 2.1.5 fragment shading 17 2.1.6 Pre-Fragment Operations 17 2.2 一个简单的着色器程序 18 2.3 VAO与VBO 21 2.4 彩色的三角形 23 2.5 shader语法简介 25 2.5.1 变量的声明 25 2.5.2 变量的转换 26 2.5.3 Vector Component Accessors 27 2.5.4 shader的结构 27 2.5.5shader中的内置变量与内置函数 28 2.5.6 cocos2dx提供的内置变量 28 三 3D图元的绘制 30 3.1 MVP 3D 矩阵变幻 30 3.1.1 投影矩阵 31 Cocos2dx的渲染流程 要想了解如何在cocos2dx引擎下编写OpenGL代码,首先要知道这些代码应当写在哪里。而cocos2dx这个引擎的渲染模块,正是基于OpenGL的API来编写,我们可以研究一下他的渲染流程。 Node的Visite函数 打开cocos2dx引擎中的CCNode.cpp文件,翻到Visit处,可看到以下代码,如图1.1所示。 图1.1 Visit Node的Visite先从导演类中取得渲染器Render对象,在从矩阵栈中获取当前的modelView矩阵。再把他们传入带3个参数的Visit中。下面我们看看这个函数都做了些什么,如图1.2,1.3所示 图1.2 visit1 图1.3 visit2 我们可以看到,当visible为false时,函数直接被return掉。之后先向栈中推入一个矩阵,在把当前的modelView矩阵放入栈中。而后就是我们熟悉的遍历过程。先遍历Z-order小于0的,绘制,而后是大于0的。这也就揭示了zorder是如何控制渲染层级的,也揭示节点树的绘制顺序。 1.2 Sprite的draw函数 下面,我们看一下精灵类draw到底做了些什么。打开引擎的CCSprite.cpp文件,翻到draw处,其代码如图1.4所示。 图1.4 Sprite::draw 我们可以看到,传说中的渲染剔除,就是在这里做的。而且就是一个AABB的判断。这函数的主要功能,就是把相关信息放入一个command中,传到了render对象中。 1.3 render对象浅析 下面,我们将详细分析下这个render对象。 首先,我们找6张可爱的水果图片,在helloworld中重复添加这些图片,运行效果如图1.5所示。 图1.5 小水果 在Renderer的render函数中打上断点,如图1.6所示。 图1.6 render函数 在Renderer的render函数中打上断点,如图1.6所示。我们查看调用堆栈的上一级,可以看到我们的大导演在每帧的循环中做了这些事情。如图1.7,1.8,1.9所示。首先更新scheduler,而后让当前的场景visit(所有节点draw函数就在这里调用的),最后调用render,推出当前矩阵,交换背缓冲。 图1.7 大导演的drawScene (1) 图1.8 大导演的drawScene (2) 图1.6 大导演的drawScene (3) 而后我们再回到render的函数中,看一下他的visitRenderQueue函数,如图1.7,1.8所示。我们首先看最常用的Quard的渲染。如果当前缓存的Quard顶

文档评论(0)

1亿VIP精品文档

相关文档