首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

怎么提高静态复杂集合体的渲染速度?显示列表 or 缓冲区对象

2013-07-09 
如何提高静态复杂集合体的渲染速度?显示列表 or 缓冲区对象?各位,现在用opengl做一个项目,需要载入一些顶

如何提高静态复杂集合体的渲染速度?显示列表 or 缓冲区对象?
各位,现在用opengl做一个项目,需要载入一些顶点数据量比较大的静态模型。原先用显示列表去显示这些模型,但是发现随着模型数据量(顶点,法线向量等)的增大,帧数会明显下降。老师建议用缓冲区对象把顶点,法线,以及索引信息全放到GPU内存中去。
我的做法是类似
        glGenBuffers(BUFFERNUM,buffers);
//绑定vertex数组
glBindBuffer(GL_ARRAY_BUFFER,buffers[0]);
glBufferData(GL_ARRAY_BUFFER,VertexArraySize,(double*)vertices,GL_STATIC_DRAW);
glVertexPointer(3,GL_DOUBLE,0,BUFFER_OFFSET(0));
glEnableClientState(GL_VERTEX_ARRAY);
        。。。。。。
分别绑定顶点,索引,和法向量缓冲区,然后调用gldrawElement来画图。

但是这么做好像对速度的改善也不明显。Ps:顶点数6W左右,面12W左右
请问各位,我这么种做法算是把数据量放到GPU内存中了么?
为什么渲染速度没感觉到明显地变化呢?

如果要想进一步提高渲染速度,应该从什么地方入手呢?

[解决办法]
最有效的提升办法就是减少扔给显卡处理的数量

比如, 自己写一个视锥裁剪算法,判断物体的包围盒是否可见,如果不可见,整个模型都不去处理
再比如,自己写一个遮挡算法, 被憋得物体遮挡的模型,也不处理

这些东西涉及到你的场景组织方式和资源的管理方式,没有固定的解决方案,需要根据自己的项目实际情况去分析


[解决办法]
无解。相同情况下,数据量变大,速度自然慢了。
这种情况只能用有损优化,近处的物体用原有的模型绘制(俗称精模),远处的物体用低模去绘制,这种优化俗称:模型lod。甚至近处的模型也可以考虑适当降低模型精度。

热点排行