您的位置:首页 > 移动开发 > Cocos引擎

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

2016-03-26 11:02 483 查看
绘图原理及优化
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比特令图片大小减半。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: