IBO比GL_TRIANGLE_STRIP差吗?

时间:2012-09-19 12:02:18

标签: c++ opengl

出于学习目的,我决定使用3种方法绘制球体

  1. 显示列表
  2. Voa Vbo(GL_TRIANGLE_STRIPE)
  3. Vao Vbo和Ibo(GL_TRIANGLES)
  4. 我读到使用ibo让程序运行得更快,但这是真的吗? 对于100个切片和100个堆栈的球体,第二个方法产生40400个顶点而第三个“仅”产生19802.通过这样做,我保存20598个每个32字节= 659136个字节。

    1. verticesSize =(切片* 4)*(堆叠+ 1);

    2. IBO verticesSize =(slices * 2)*(stacks-1)+2;

    3. 但是我需要创建索引数组,在这种情况下,大小为118800(创建所有面所需的索引数)* 4(unsigned int的大小)= 475200字节! 虽然第二种方法使用15fps渲染1000个球体,但第三种方法渲染1000只几乎没有6pfs

      1. 将指数数组从GL_TRIANGLES转换为 GL_TRIANGLE_STRIP将提供更有效的方法,然后第二 方法
      2. 使用ibo渲染球体是不是很糟糕?
      3. 为什么它更慢?indices数组中的顺序是否有任何问题?
      4. 或许我写的代码完全错了,为什么它如此挣扎:( 如果有人有兴趣,这是我的代码http://pastebin.com/raw.php?i=74jLKV5M

1 个答案:

答案 0 :(得分:1)

glDrawElements调用错误。 count参数应该是索引的数量,而不是数字的次数4.尝试更改它。

使用索引而不是三角形条带几乎总是更快。事实上,如果驾驶员在幕后使用索引来渲染三角形条带,我也不会感到惊讶。

正如我在评论中提到的那样,索引的顺序会影响性能。但是对于你的球体,你使用的索引模式可能是最优的,即便如此,它所产生的差异也很小。