断开2条垂直线"线#34;使用glDrawArrays GL_TRIANGLE_STRIP

时间:2014-12-31 01:26:28

标签: opengl-es opengl-es-2.0

是否可以只为GL_TRIANGLE_STRIP格式化一组数组缓冲区数据来分隔/断开线路。基本上,我在2D正射投影中有一堆在视口中间隔开的垂直线。每条线是2个三角形(因此三角形条带有4个顶点)。有一条连接到下一条线的对角线是不可取的。

我是不是更改为GL_TRIANGLES或将条带分离成单独的数组?

1 个答案:

答案 0 :(得分:4)

在更高版本的OpenGL(ES 3.0或任何最新版本的完整OpenGL)中,您可以选择以下几种方法:

  1. 原始重启。要使用它,请调用(在ES 3.0中):

    glEnable(GL_PRIMITIVE_RESTART_FIXED_INDEX);
    

    然后在索引序列中您想要启动新原语的任何位置使用索引格式的最高可能索引(例如0xffffGL_UNSIGNED_SHORT)。

  2. 使用实例化渲染或来自glMultiDraw*()系列的调用,通过一次绘制调用渲染多个基元。

  3. 重复索引。

  4. 最后一个是ES 2.0中唯一真正的选项,所以我将详细阐述它。虽然这种方法看起来有点脏(对我来说......),但它已经使用了很长时间,实际上是非常安全的。我们的想法是重复顶点以将“单独”基元与简并三角形连接起来,这些三角形不会绘制任何像素,因为它们的两个顶点是相同的。

    要使其工作,请重复一个基元的最后一个索引,以及下一个基元的第一个索引。假设您有两个三角形条带,每个条带有4个顶点,并带有以下索引:

    i1 i2 i3 i4
    i5 i6 i7 i8
    

    如果要将其绘制为单个三角形条带,则索引序列为:

    i1 i2 i3 i4 i4 i5 i5 i6 i7 i8
    

    注意如何重复i4(第一个原始基元的最后一个索引)和i5(第二个原始基元的第一个索引)。这允许生成连接两个原始图元的不可见简并三角形。