1

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

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

  1. 使用 VBO 来渲染它们。
    优点:比立即模式更快。
    缺点:(我对 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 更快?

请注意:我从 Java 调用 OpenGL 的东西,所以没有将 Java 数组转换为 GPU 数组的平滑方法(在传输之前,所有东西都必须存储在中间 FloatBuffers 中)。

4

2 回答 2

1

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

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

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

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

在使用几何着色器的简单四边形的情况下,将简单的 GL_POINTS 转换为两个 GL_TRIANGLES 也可以解决问题。

于 2013-02-21T09:38:36.810 回答
0

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

于 2013-02-21T07:59:46.500 回答