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