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一个包含所有点的数组,这非常有效。有没有比上面的代码更好的方法来绘制许多相同的对象?

4

3 回答 3

8

看看这个关于实例化的页面:它包含许多参考:

另请参见Wikipedia 上的几何实例化

于 2010-01-03T15:27:57.867 回答
3

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

于 2010-01-03T18:03:01.563 回答
2

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

于 2010-01-03T21:28:06.983 回答