OpenGL ES和使用VBO重叠三角形问题

4

一些背景信息:

我对OGL非常陌生。我的应用程序只涉及2D。所有对象都是垂直于视线方向的,并且我使用正交投影。我发现系统的性能受到绘制*调用数量的限制,这表明我需要进行更多批处理。

我只需要绘制一个对象,但它由成千上万个可能重叠的三角形组成。在我的特定应用程序中,我有预先计算几何图形并按后面的顺序排列三角形的能力,因为它们具有不同程度的透明度。顶点属性包括颜色(仅)和alpha,用于片段程序。

我所做的事情:

所有基元都是三角形,我为每个三角形的3个顶点分配相同的颜色,因为颜色在面上是恒定的。我将所有三角形的所有顶点和它们的颜色放入单个VBO(16位;没有那么多顶点)。索引缓冲区按后面的顺序排列三角形,我发出单个绘制调用。我使用alpha混合(SRC_ALPHA,ONE_MINUS_SRC_ALPHA)。

结果:

我看到结果在我拥有和测试的唯一机器上被正确地混合和渲染。我还没有在其他机器上尝试过。我已经搜索了相当长的时间,但徒劳无功,找不到明确的答案。顺便说一下,唯一的参考是VBO扩展规范中提到的“基元序列”,但它没有解决重叠基元时会发生什么。

问题:

这是保证的行为吗?也就是说,结果是否与立即模式下(由标准保证)发出多个调用的结果相同?

注意:深度缓冲区和模板缓冲区已关闭。


澄清一下,即使三角形对于观察方向是正常的,所有顶点仍然具有深度,以防这会产生影响。 - Vivek Kumar
1
+1 虽然你说自己对 OGL 非常新,但是你似乎已经比在 SO 上提问的普通 ES 初学者更加深入地理解了许多基本原理。 - Christian Rau
2
这并不是关于VBO扩展的问题,而是关于它所构建的顶点数组接口。在OpenGL 2.0规范中,它解释了glDrawArrays和类似调用的行为,就像单个glBegin/glEnd块一样,因此可以推断出相同的限制适用。但是有趣的是,您从哪里得到的信息,即单个glBegin/glEnd块中的基元按顺序呈现(或实际上按顺序到达帧缓冲区)? - Christian Rau
很遗憾,我无法为您指出一个地方 :(. 这个信息来自一位熟悉标准但无法回答问题的同事。 - Vivek Kumar
1个回答

3

OpenGL规范保证基元将按提供的顺序呈现。从glDraw*命令中提取的每个基元将按其各个顶点指定的顺序呈现。

因此,是的:如果您按顺序放置三角形,那么在呈现它们时就会按照该顺序获取它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接