IBO 比 GL_TRIANGLE_STRIP 更糟?
Posted
技术标签:
【中文标题】IBO 比 GL_TRIANGLE_STRIP 更糟?【英文标题】:IBO worse then GL_TRIANGLE_STRIP? 【发布时间】:2012-09-19 12:02:17 【问题描述】:出于学习目的,我决定使用 3 种方法绘制球体
-
显示列表
Voa Vbo (GL_TRIANGLE_STRIPE)
Vao Vbo 和 Ibo (GL_TRIANGLES)
我读到使用 ibo 可以使程序运行得更快,但这是真的吗? 对于 100 个切片和 100 个堆栈的球体,第二种方法产生 40400 个顶点,而第三种“仅”产生 19802 个顶点。通过这样做,我每 32 字节 = 659136 字节节省 20598 个顶点。
verticesSize=(slices*4)*(stacks+1);
IBO verticesSize=(slices*2)*(stacks-1)+2;
但是我需要创建索引数组,在这种情况下,索引的大小为 118800(创建所有面所需的索引数)*4(无符号整数的大小)=475200 字节! 第 2 种方法以 15fps 渲染 1000 个球体,而第 3 种方法以几乎 6pfs 渲染 1000 个球体
-
是否将索引数组从 GL_TRIANGLES 转换为
GL_TRIANGLE_STRIP 将提供比第二种更有效的方法
方法?
使用 ibo 渲染球体是个坏主意吗?
为什么比较慢?索引数组的顺序有关系吗?
或者也许我写的代码完全错误,这就是为什么它如此挣扎:( 如果有人有兴趣,这是我的代码http://pastebin.com/raw.php?i=74jLKV5M
【问题讨论】:
索引的顺序可以而且确实很重要,它与顶点获取缓存有关。但这可能不是,让我检查您的代码并回复您 【参考方案1】:glDrawElements 调用错误。 count 参数应该是索引的数量,而不是数字乘以 4。尝试更改它。
使用索引而不是三角形条应该总是更快。事实上,如果驱动程序也在幕后使用索引来渲染三角形条带,我不会感到惊讶。
正如我在 cmets 中提到的,索引的顺序会影响性能。但是,对于您的球体,您使用的索引模式可能是最优化的,即使如此,它所产生的差异也很小。
【讨论】:
以上是关于IBO 比 GL_TRIANGLE_STRIP 更糟?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 GL_TRIANGLE_STRIP 绘制一个矩形框?