一些背景知识:
我对OGL很新。我的应用只关注2D。所有物体都与观察方向垂直,我使用正交投影。我发现系统的性能受到draw *调用次数的限制,表明我需要批处理更多。
我只需要绘制一个对象,但它包含数千个可能重叠的三角形。我能够在我的特定应用程序中预先计算几何体,并将三角形排在前面,因为它们具有不同程度的透明度。顶点属性由颜色(仅)包括在片段程序中使用的alpha。
我做了什么:
所有基元都是三角形,我将每个三角形的3个顶点分配为相同的颜色,因为颜色在面上是恒定的。我把所有三角形的所有顶点和它们的颜色放在一个单独的VBO中(16位;没有那么多的顶点)。索引缓冲区将三角形排在前面,我发出一个绘制调用。我使用alpha混合(SRC_ALPHA,ONE_MINUS_SRC_ALPHA)。
结果:
我看到结果在我拥有并测试的唯一机器上正确混合和渲染。我没有在别人身上试过。我搜索了很长一段时间,但是徒劳无功,得到了一些明确的答案。顺便说一句,唯一的参考是在VBO扩展规范中提到了一个“基元序列”,但它没有解决基元重叠时发生的事情。
问题:
这是保证的行为吗?那就是结果与在立即模式下glBegin(...)和glEnd(...)内发出多个调用相同(这是由标准保证的)?
注意:深度缓冲区和模板缓冲区已关闭。
答案 0 :(得分:3)
OpenGL规范保证基元将按照提供的顺序呈现。从glDraw*
命令拉出的每个基元将按其组件顶点指定的顺序进行渲染。
所以是的:如果你把三角形放在一个顺序中,那就是你渲染它们时将它们排出的顺序。