绘图原理及优化
Cocos2d-x是对不同平台下OpenGL的包装。具体来说,采用的是OpenGL ES(OpenGL在移动设备上的衍生版本)。OpenGL是一个基于C语言的三维图形API,包括了基本功能:绘制几何图形,变换,着色,光照,贴图等;以及高级功能:曲面图元,光栅操作,景深,shader编程等。
1.状态机模型:OpenGL基于状态进行绘图,是一种状态机模型。在此模型下,OpenGL时刻维护着一组状态,这组状态涵盖了一切绘图参数。这种模型具有的优势如下:
(1)由于计算机绘图十分复杂,通常包含诸多参数,然而多数参数并不频繁改变,因此每次都重新设置耗时耗力。作为状态保存则可以在部分参数没有改变的时候,维持不变。
(2)该模型可将绘图设备人为地分为两个部分:“服务器端”负责具体绘制渲染;“客户端”负责向服务器端发送绘图指令。当游戏运行在单一设备上时,cpu作为客户端,GPU(硬件显卡或软件模拟显卡)作为服务器端,cpu与GPU通过总线相连。当总线带宽不能满足高速运算所需传递的数据时,令cpu将大部分运算处理结束,仅将结果进行传输给GPU将减少不必要的传输数据从而提高效率。这一优化在远程绘图方面更加明显,由于网络带宽更加有限,客户端可以尽量将工作完成,以减少数据的发送。
2.渲染流水线:好难懂,我太菜,仅能懂一小部分,以后有机会再填坑
3.绘图原理——渲染树的绘制:由于之前的内容有说过Cocos2d-x的渲染是对场景,层,精灵等嵌套方式形成的一棵树进行绘制。在实现上,采用了DFS递归的方式,经简化如下: