2010-01-03 264 views
7

我想用OpenGL绘制很多球体(〜100k)。到目前为止,我在做喜欢在OpenGL中绘制很多球体

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 2010-01-03 15:56:33

+0

我模拟土星的环,我想实时查看结果。 “深度”的视觉反馈至关重要,因此简单的点不起作用。看例如:http://hanno-rein.de/examplespheres.png和http://hanno-rein.de/examplepoints.png – hanno 2010-01-03 18:54:17

+1

好例证。您可以通过在像素着色器中进行照明来模拟球体外观。即使只应用基本的纹理也可以帮助你。要指出的是,100K球体必然会伤害perf,而点数不会太多(正如你已经注意到的那样)。 – Bahbar 2010-01-03 21:19:00

回答

2

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