我必须在“弹簧质量”系统的3D物理模拟中绘制大量的球体。
我想知道一种绘制球体的有效方法,而无需在模拟的每一步编译显示列表(每个步骤可能会在几毫秒到几秒之间变化,具体取决于计算中涉及的实体数量)。 / p>
我已经读过顶点缓冲区对象是绘制对象的有效方法,有时也需要更新。
是否有任何方法以比glutSolidSphere更快的方式绘制OpenGL球体?
答案 0 :(得分:2)
我想知道一种绘制球体的有效方法,而无需在模拟的每一步编译显示列表(每个步骤可能会在几毫秒到几秒之间变化,具体取决于计算中涉及的实体数量)。 / p>
如果您输入的几何图形是动态的,为什么要生成显示列表呢?显示列表适用于从未或很少更改的静态几何体。
我已经读过顶点缓冲区对象是绘制对象的有效方法,有时也需要更新。
实际上,VBO对静态几何也是最有效的。通常,您希望保持实际几何更新的数量尽可能低。在你的情况下,唯一更新的是球体的位置(也许是大小)。这是实例绘图的主要示例。然而,这也很有效,只更新一个统一或变换矩阵,并进行调用绘制球体。
Vertex Arrays和VBO的想法是,您只需一次调用即可绘制整批几何体。一个球体就是这样一批。
答案 1 :(得分:2)
球体是自相似的;每个球体只是任何其他球体的缩放版本。我认为没有必要重新生成任何几何体。实际上,我认为根本不需要超过一个球体。
这只是提供适当的缩放矩阵的问题。我会建议一个半径为1的球体,它以显示列表或缓冲对象网格的原点为中心。然后,您可以使用刻度将其转换为不同的位置,以设置新的半径。