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