2012-05-11 40 views
4

一些背景:OpenGL ES和与VBO重叠的三角形

我对OGL很新颖。我的应用程序仅关注2D。所有物体都与观察方向垂直,我使用正交投影。我发现系统的性能受限于绘制*电话的数量,这表明我需要批量处理更多。

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

我做了什么:

所有原语是三角形和我分配每个三角形的三个顶点相同的颜色,因为颜色是整个脸不变。我把所有三角形的顶点和它们的颜色放到一个单一的VBO中(16位;没有那么多顶点)。索引缓冲区将三角形排在前面,我发出一个绘制调用。我使用alpha混合(SRC_ALPHA,ONE_MINUS_SRC_ALPHA)。

结果:

我看到的结果被正确地混合并呈现我具有唯一的机器上和测试上。我没有尝试过别人。我已经搜索了相当长的一段时间,但徒劳无功,寻求一些明确的答案。顺便说一下,唯一的参考是VBO扩展规范中提到的“基元序列”,但它没有解决基元重叠时发生的情况。

问题:

这是保证的行为吗?这就是说,结果将与在立即模式下的glBegin(...)和glEnd(...)内发出多个调用(这是标准保证的)相同吗?

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

+0

澄清,即使三角形是正常的观看方向,所有顶点确实有一个深度,如果有所作为 –

+1

+1而你说你是*“对OGL很新”*你似乎已经拥有对于很多基本原则的理解比一般ES初学者在这里提出的要求更加扎实。 –

+2

这不是VBO扩展的问题,而只是它构建的顶点数组接口。在OpenGL 2.0规范中,它解释了'glDrawArrays'和类似的调用,*就像一个单独的'glBegin/glEnd'块一样,所以可以推断出相同的限制。但是,它会因为单个'glBegin/glEnd'块中的原语按顺序呈现(或实际上按顺序到达帧缓冲区)而得到间隔? –

回答

3

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

所以是的:如果你把三角形放在一个顺序中,这就是你渲染它们的顺序。