Cocos2d-x笔记记忆整理Day6-绘图原理及优化

绘图原理及优化
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递归的方式,经简化如下:

4.额外的优化方式:
(1)碎图压缩:由于OpenGL在显存中保存的纹理长宽像素数一定是2的幂次,对于不足部分将填充空白,无疑浪费了显存。通过把小的纹理拼接为一个大纹理,减少纹理空间的浪费。 (2)批量渲染:把需要批量绘制的纹理通过碎图的方式放入一个大型纹理中,然后统一绘制,节省纹理切换所需时间。 (3)颜色深度:表达一个颜色所需的比特长度。通常采用RGBA8888格式利用32比特来描述一个颜色,对于品质要求不高时可以使用RGBA4444格式,16比特令图片大小减半。

相关文章

    本文实践自 RayWenderlich、Ali Hafizji 的文章《...
Cocos-code-ide使用入门学习地点:杭州滨江邮箱:appdevzw@1...
第一次開始用手游引擎挺激动!!!进入正题。下载资源1:从C...
    Cocos2d-x是一款强大的基于OpenGLES的跨平台游戏开发...
1.  来源 QuickV3sample项目中的2048样例游戏,以及最近《...
   Cocos2d-x3.x已经支持使用CMake来进行构建了,这里尝试...