在OpenGL中绘制多个球体

在OpenGL中绘制多个球体,opengl,performance,glut,visualization,Opengl,Performance,Glut,Visualization,我想使用OpenGL绘制许多球体(~100k)。到目前为止,我正在做类似的事情 for (int i=0; i<pnum; i++){ glPushMatrix(); glTranslatef(bpos[i].x, bpos[i].y, bpos[i].z); glCallList(DListSPHERE); glPopMatrix(); } for(int i=0;i查看以下页面:它包含许多参考: 进行了一些测试,显示何时使用实例,何时不使用实

我想使用OpenGL绘制许多球体(~100k)。到目前为止,我正在做类似的事情

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

for(int i=0;i查看以下页面:它包含许多参考:

  • 进行了一些测试,显示何时使用实例,何时不使用实例:

  • PSEDIO实例的OpenGL实现(推荐用于旧硬件)。

  • OpenGL实例:


也见。

如果画出~100K球,你可能需要考虑光线投射,而不是用多边形网格来近似它们。Sigg等人(2006)和GunHOLD(2003)的论文。演示如何执行此操作。如果执行此操作,您可以重用大部分快速点精灵代码。

您可以使用点精灵和碎片着色器来复制渲染球体的效果,而不使用实际球体几何体。不过,我会先尝试实例化。

正如Gregory Pakosz所述,实例化是执行此操作的标准方法。但是,我真的不明白现实世界中的情况需要~100K个球体。我能想到的所有东西都可以用圆点来更好地服务。想了解一下你的使用情况吗?我模拟土星环,我想实时可视化结果。“深度”的视觉反馈是至关重要的,因此简单的点不起作用。请参见示例:和漂亮的插图。您可以通过在像素着色器中进行照明来模拟球体外观。即使仅应用基本纹理也会对您有所帮助。重点是,100K球体必然会影响性能,而点不会有多大影响(正如您已经注意到的)。