我可以使用哪些技术在OpenGL中更高效地渲染大量对象?

你可以把我的应用程序想象成一个非常大的球棍图(或图)。 有时候,这个graphics可能变得非常大,元素的数量甚至超过了屏幕上的像素。 目前,我只是将所有纹理(如GL_POINTS )和行传递给使用VBO的graphics卡。

当元素的数量超过了像素的数量,这是做这个最有效的方法吗? 还是应该在将所有内容交给GPU之前在CPU上进行一些计算?

如果重要,我使用GL_DEPTH_TESTGL_ALPHA_TEST 。 我做了一些alpha混合,但可能不足以造成巨大的性能差异。

我的场景有时可能是静态的,但是用户可以控制一个典型的弧形球照相机,并且可以平移,旋转或缩放。 在这些操作过程中,性能下降是显而易见的。

如果屏幕上每个像素有多个元素,则不需要渲染所有元素。 尝试find一种方法来剔除不再可见的元素,或者不对最终图像做出贡献。

考虑在你的模型上使用dynamic的细节级别减less负载也是一个好主意。

不幸的是,要find最快的解决scheme,您可能需要实施和testing几个,因为它可以根据您的显卡制造商,驱动程序版本等而有所不同。

例如,渲染为点和线可能实际上比渲染为纹理四边形(三角形对)要慢 – 三角形渲染是最常见的用例,因此制造商将重点放在这个path上。 一些司机可能只是将点和线实施为三角形,所以如果您进行更改,您可能不会注意到任何差异。

如果你有许多相似的精灵,你也应该看看实例化技术,这将减less你需要发送到GPU的数据量,并可能提高性能。