OpenGL学习步骤 - GameKong/restaurant GitHub Wiki

教程

好的OpenGL书籍都偏工具书,直接看书会比较懵逼,直接看这个教程就行:OpenGL教程,刚看也会比较懵逼,尤其是在三角形那一节,都是最基础也是最常用的接口。这些接口跟我们平时的编程思路有点不一样,需要多看几遍并且要记下来。理解这一节过后,就基本进入的OpenGL思维,后面就比较容易理解了。

书籍

建议购买OpenGL红蓝宝书

cocos项目

OpenGL相关的绘制集中在render类中,里面会看到教程中常用的一些接口。

看过OpenGL后,会更好的理解cocos的: 主循环流程和绘制流程,发现所有需要绘制的类,如 node、sprite、layer以及它们的派生类,都是相同的做法:从主循环开始调用drawScene()->调用runningScene的visit函数,visit函数会调用他所有子节点的visit函数(根据order排序,order小于0子节点的在draw自己之前调用,然后调用自己draw,再调用order大于0的子节点的visit),以及自己的draw函数。draw函数的主要目的是准备需要绘制的顶点以及纹理数据,并且把它们封装到一个renderCommand当中。在nodd的draw函数中不会做任何事,因为node本身不需要绘制,但是继承自node的其他类根据自己的特性会重写该函数。例如spirte,在sprite的draw函数中,会根据我们设置的位置,缩放,旋转的配置计算绘制的顶点,结合顶点以及我们设置的纹理图片,以及gl的blendfunc混合方式和shaderProgram程序封装到一个renderCommand类中,然后加入到render类的renderCommandList绘制列表中。因为所有顶点顶级节点是runningScenen,所以这样可以遍历所有的需要绘制的节点,并把它们的数据封装到渲染命令中然后加入到渲染列表。再draw完所有节点之后,会调用render类中的visitRenderQueue()绘制渲染列表中的所有命令,在这之前还会根据Zoder进行一些绘制排序,以及其他的工作。 这样一个绘制流程基本就结束了,也就是我们所说的一帧。在下一个主循环当中,依旧是这样绘制,当然在绘制场景之前会调用_scheduler->update(_deltaTime),对我们每帧的事件和动画进行处理,处理之后再接根据处理后的数据配置要绘制的节点。但是触摸机制不在主循环当中,触摸后会直接调用触摸监听器的回调函数。 其他的比如RenderTexture,ClipNode,DrawNode也会更容易理解,因为它们的draw方法中都会有opengl相关的接口和知识。

#基本概念 1.齐次坐标系:n维坐标用n+1维向量表示。 2.归一化处理:{x,y,z,w} => {x/w, y/w, z/w, 1} 的过程