4

一些背景:

我对 OGL 很陌生。我的应用程序只关注 2D。所有对象都垂直于观察方向,我使用正交投影。我发现系统的性能受到 draw* 调用次数的限制,这表明我需要进行更多批处理。

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

我做了什么:

所有的基元都是三角形,我为每个三角形的 3 个顶点分配相同的颜色,因为颜色在整个面上是恒定的。我将所有三角形的所有顶点及其颜色放入一个 VBO(16 位;没有那么多顶点)。索引缓冲区将三角形排序到前面,然后我发出一个绘图调用。我使用 alpha 混合(SRC_ALPHA,ONE_MINUS_SRC_ALPHA)。

结果:

我看到结果在我拥有和测试的唯一机器上正确混合和渲染。我没有在别人身上试过。我已经搜索了很长一段时间,但徒劳无功,寻找一些明确的答案。顺便说一句,唯一的参考是在 VBO 扩展规范中提到了“原语序列”,但它没有解决原语重叠时会发生什么。

问题:

这是保证的行为吗?那结果是否与在立即模式下在 glBegin(...) 和 glEnd(...) 中发出多个调用相同(由标准保证)?

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

4

1 回答 1

3

OpenGL 规范保证基元将按照提供的顺序呈现。从glDraw*命令中提取的每个图元都将按照其组件顶点指定的顺序进行渲染。

所以是的:如果您按顺序排列三角形,这就是渲染它们时将它们取出的顺序。

于 2012-05-11T11:53:14.377 回答