tet*_*ive 2 opengl-es opengl-es-2.0
是否可以仅使用一组格式化为 GL_TRIANGLE_STRIP 的数组缓冲区数据来分隔/断开线路。基本上,我在 2D 正射投影中在视口上有一堆垂直线。每条线是 2 个三角形(因此三角形带有 4 个顶点)。有一条对角线连接到下一条线,这是不可取的。
我是否坚持更改为 GL_TRIANGLES 或将条带分离成单独的数组?
在更高版本的 OpenGL(ES 3.0 或任何最新版本的完整 OpenGL)中,您有几个选择:
原始重启。要使用它,您可以调用(在 ES 3.0 中):
glEnable(GL_PRIMITIVE_RESTART_FIXED_INDEX);
Run Code Online (Sandbox Code Playgroud)
然后在索引序列中要开始新基元的任何点使用索引格式的最高可能索引(例如0xfffffor GL_UNSIGNED_SHORT)。
使用实例化渲染或来自glMultiDraw*()系列的调用通过单个绘制调用渲染多个图元。
重复索引。
最后一个是 ES 2.0 中唯一真正的选项,所以我将详细说明它。虽然这种方法可能看起来有些肮脏(对我来说确实如此……),但它已经使用了很长时间,而且实际上非常安全。这个想法是你重复顶点以将“单独”的图元与退化三角形连接起来,因为它们的两个顶点是相同的,所以不绘制任何像素。
为了使这个工作,你重复一个基元的最后一个索引,以及下一个基元的第一个。假设您有两个三角形带,每个带 4 个顶点,具有以下索引:
i1 i2 i3 i4
i5 i6 i7 i8
Run Code Online (Sandbox Code Playgroud)
如果要将其绘制为单个三角形条,则索引序列为:
i1 i2 i3 i4 i4 i5 i5 i6 i7 i8
Run Code Online (Sandbox Code Playgroud)
注意i4(第一个原始基元的最后一个索引)和i5(第二个原始基元的第一个索引)是如何重复的。这允许生成连接两个原始图元的不可见退化三角形。
| 归档时间: |
|
| 查看次数: |
866 次 |
| 最近记录: |