opengl-es - OpenGL ES 和与 VBO 重叠的三角形

标签 opengl-es

一些背景:

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

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

我所做的:

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

结果:

我看到结果在我拥有和测试的唯一机器上正确混合和呈现。我没有在其他人身上试过。我已经搜索了很长一段时间,但徒劳无功,寻求一些明确的答案。顺便说一句,唯一的引用是在 VBO 扩展规范中,其中提到了“基元序列”,但它没有解决基元重叠时发生的情况。

题:

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

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

最佳答案

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

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

关于opengl-es - OpenGL ES 和与 VBO 重叠的三角形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10549981/

相关文章:

android - GLSurfaceView 渲染器,如何强制重新创建表面?

android - 在后台运行 Android OpenGL 作为应用程序的渲染资源?

android - 如何使用 OpenGL 在 Android 上绘制位图

android - OpenGL ES 2.0——简单粒子系统的最佳途径

javascript - `precision mediump float` 是什么意思?

graphics - glUseProgram 后丢失/重置什么状态?

iPhone OpenGLES 2.0 文本纹理带有奇怪的边框(不是描边)问题

android - 在 opengl es 2.0 中混合 alpha

javascript - 从深度重建片段位置

android - GLES10.glGetIntegerv 在三星设备上返回 0