渲染成千上万的移动四边形

时间:2013-02-21 07:52:03

标签: opengl vbo displaylist

我必须渲染大量的粒子。这些粒子是简单的非纹理四边形(实际上是正方形)。哦,他们一直在移动,因为它们是粒子。

我考虑了2个选项,但由于我不是OpenGL专家,我不知道什么是最好的。

  1. 使用VBO全部渲染。
    优点:比立即模式更快。<​​br/> 缺点:(我不太了解VBO但是)从我收集的四边形坐标需要存储在RAM中的某个缓冲区中...并且所有这些坐标都需要由CPU计算。因此,对于粒子P1(x,y),我必须计算4个其他坐标(P2(x-1,y-1),P3(x-1,y + 1),P4(x + 1,y + 1) ,P5(x + 1,y-1)) - 这对CPU来说很重要!

  2. 使用显示列表:首先为单个方形四边形创建一个微小的显示列表。然后,为每个粒子渲染一些pushMatrix, glTranslate, callList, popMatrix 优点:我不必手动计算4个坐标 - glTranlate就是这样做的 据推测,显示列表比VBO更快 缺点:当它们仅包含一个四边形时,它们是否比VBO更快?

  3. 请注意:我正在从Java调用OpenGL内容,因此没有顺利的方法将Java数组转换为GPU数组(所有内容都必须在传输之前存储在中间的FloatBuffers中)。

2 个答案:

答案 0 :(得分:1)

显示列表适用于静态几何体。只渲染一个四边形,然后改变转换,冲洗和重复是非常低效的。

更新VBO更好但仍然不是最佳。

您应该查看实例化渲染。这是一个教程:

http://ogldev.atspace.co.uk/www/tutorial33/tutorial33.html

对于使用几何着色器的简单四边形,将简单的GL_POINTS转换为两个GL_TRIANGLES也可以。

答案 1 :(得分:0)

要进行粒子模拟,我认为您正在寻找的是转换反馈,这是一个很好的演示,其中包含一些如何执行此操作的代码http://prideout.net/blog/?tag=opengl-transform-feedback