gpt4 book ai didi

opengl-es - 使用 glDrawArrays GL_TRIANGLE_STRIP 断开 2 个垂直 "lines"

转载 作者:行者123 更新时间:2023-12-02 21:20:57 24 4
gpt4 key购买 nike

是否可以仅使用一组针对 GL_TRIANGLE_STRIP 格式化的数组缓冲区数据来分隔/断开线路。基本上,我在 2D 正交投影中在视口(viewport)上有一堆垂直线。每条线都是 2 个三角形(因此三角形带有 4 个顶点)。有一条对角线连接到下一条线,这是不受欢迎的。

我是否坚持更改为 GL_TRIANGLES 或将 strip 分成单独的数组?

最佳答案

在更高版本的 OpenGL(ES 3.0 或任何最新版本的完整 OpenGL)中,您将有几个选项:

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

    glEnable(GL_PRIMITIVE_RESTART_FIXED_INDEX);

    然后在索引序列中要开始新原语的任何点使用索引格式的最高可能索引(例如,0xffff 表示GL_UNSIGNED_SHORT)。

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

  3. 重复索引。

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

为了实现此目的,您需要重复一个基元的最后一个索引以及下一个基元的第一个索引。假设您有两个三角形条,每个三角形条有 4 个顶点,具有以下索引:

i1 i2 i3 i4
i5 i6 i7 i8

如果您想将其绘制为单个三角形 strip ,则索引顺序为:

i1 i2 i3 i4 i4 i5 i5 i6 i7 i8

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

关于opengl-es - 使用 glDrawArrays GL_TRIANGLE_STRIP 断开 2 个垂直 "lines",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27715006/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com