在OpenGL中绘制许多球体

时间:2010-01-03 15:26:19

标签: 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();
}

在使用适当的球体之前,我使用了GL_POINTS。这让我可以用一个包含非常高效的所有点的数组来调用glDrawArrays。有没有比上面的代码更好的方法来绘制许多相同的对象?

3 个答案:

答案 0 :(得分:8)

instancing上查看此页面:它包含许多参考资料:

另见Geometry instancing on Wikipedia

答案 1 :(得分:3)

如果绘制~100k球体,您可能需要考虑光线投射它们而不是使用多边形网格来近似它们。 Sigg等人撰写的论文GPU-Based Ray-Casting of Quadratic Surfaces。 (2006)和Gumhold(2003)的Splatting Illuminated Ellipsoids with Depth Correction展示了如何做到这一点。如果这样做,您可以重复使用大部分快速精灵代码。

答案 2 :(得分:2)

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