在OpenGL中绘制许多球体

7

我希望使用OpenGL绘制许多球体(~100k)。目前,我正在执行以下操作:

for (int i=0; i<pnum; i++){
     glPushMatrix();
     glTranslatef(bpos[i].x, bpos[i].y, bpos[i].z);
     glCallList(DListSPHERE);
     glPopMatrix();
}

在使用适当的球体之前,我使用了GL_POINTS。这使我能够使用包含所有点的数组调用glDrawArrays,非常高效。除了上述代码之外,是否有更好的方法来绘制许多相同的对象?


1
正如Gregory Pakosz所提到的,实例化是实现这一目标的标准方式。然而,我真的不明白什么样的实际情况需要大约100K个球体。我能想到的所有事情都可以用圆点更好地完成。您能详细说明一下您的使用情况吗? - Bahbar
我模拟土星的环,并希望实时可视化结果。 "深度" 的视觉反馈至关重要,因此简单的点无法胜任。例如:http://hanno-rein.de/examplespheres.png 和 http://hanno-rein.de/examplepoints.png - hanno
1
不错的插图。你可以通过在像素着色器中进行照明来模拟球体外观。即使只应用基本纹理,也会对此有所帮助。重点是,100K个球体肯定会影响性能,而点则不会那么多(正如你已经注意到的那样)。 - Bahbar
3个回答

8

3

2
你可以使用点精灵和片段着色器来复制渲染球体的效果,而不需要实际的球体几何形状。但我建议先尝试实例化技术。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接