在OpenGL ES 2.0中渲染大量较小的对象

时间:2011-08-08 10:07:51

标签: ios shader opengl-es-2.0

向所有人致以问候。

我过去几天一直在努力使用OpenGL ES 2.0和一个特殊问题。我正在寻求为iPhone实现一个Geometry Wars克隆,以获得乐趣并学习这项技术。所以,我在3d编程方面的背景相当不错,虽然主要集中在矢量数学,而不是绘制对图形API的调用,因为我在过去几年里一直在使用DirectX。然而,问题是我主要使用更大的网格,以多种方式加载,翻译和转换它们,现在我发现自己处于一个我想要处理小网格的位置,以及很多网格。

对象是三角形,矩形,六边形等。我希望能够单独修改它们(例如,使另一条边缘波浪状或脉动)。当我使用多个大网格物体时,我已经为它们做了单独的绘制调用,可以轻松地附加着色器及其各自的参数,但在这种情况下,我想在一次调用中渲染所有这些,并且我的知识让我失望。< / p>

所以,要澄清我的问题。你如何修改小网格,最好是存储在一个顶点数组中,然后使用带有OpenGL ES 2.0的着色器一次渲染它们?

虽然代码示例更受欢迎,但“简单”的解释足以让我开始。我想我在这里遗漏了一些小事,非常感谢任何帮助。

提前致谢,

卡尔

1 个答案:

答案 0 :(得分:-1)

Instancing(和instanced arrays)之类的声音可以解决您的问题,尽管对于iOS或ES来说可能有点过于先进而无法支持。这样,您可以使用每个实例数据(如特定纹理索引或子纹理或着色器参数)渲染相同几何体的多个副本。但是,当然,在一次绘制调用中,您无法使用完全不同的着色器渲染不同的对象。

否则更简单(也可能更少优化)的函数glMultiDrawArrays/Elements在一次调用中呈现多个完全不同的几何,但你无法分辨哪个三角形属于着色器中的哪个对象,我也怀疑它是否给出了大大提升了性能。

相关问题