我必须渲染大量的粒子。这些粒子是简单的非纹理四边形(实际上是正方形)。哦,他们一直在移动,因为它们是粒子。
我考虑了2个选项,但由于我不是OpenGL专家,我不知道什么是最好的。
使用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来说很重要!
使用显示列表:首先为单个方形四边形创建一个微小的显示列表。然后,为每个粒子渲染一些pushMatrix, glTranslate, callList, popMatrix
优点:我不必手动计算4个坐标 - glTranlate就是这样做的
据推测,显示列表比VBO更快
缺点:当它们仅包含一个四边形时,它们是否比VBO更快?
请注意:我正在从Java调用OpenGL内容,因此没有顺利的方法将Java数组转换为GPU数组(所有内容都必须在传输之前存储在中间的FloatBuffers中)。
答案 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