c++ - OpenGL实际上是如何读取索引的?

标签 c++ opengl terrain gl-triangle-strip

我试图弄清楚如何用triangle_strips绘制平坦的地形,当我编写用于创建索引数组的循环时,我想OpenGL如何知道解析索引,因为到目前为止我已经看到每个人在创建索引时都写它们像这样:

0 3 1 4 2 5 0xFFFF 3 6 4 7 5 8

(这里是 0xFFFF 原始重启,标记 strip 的结尾)

所以从技术上来说,据我所知,这应该用每个三角形的偏移量+1来解析...所以第一个三角形将使用前三个索引(0 3 1),下一个三角形将使用偏移量+1(3 1 4)。 ..下一个 (1 4 2) 等等。如果我没有解释清楚的话,这是图片: First way

但我看到的另一种方法是分别为每个三角形创建索引......所以: 0 3 1 3 1 4 1 4 2 4 2 5 Second way

所以我的问题是如何指定布局...当我将绘制调用设置为 GL_TRIANGLE_STRIP 或其他时,OpenGL 是否会自动执行此操作?

最佳答案

三角形基元分为三种:

  • GL_TRIANGLES:顶点 0、1 和 2 形成一个三角形。顶点 3、4 和 5 形成一个三角形。等等。

  • GL_TRIANGLE_STRIP:每组 3 个相邻顶点形成一个三角形。 n 长度的顶点流将生成 n-2 个三角形。

  • GL_TRIANGLE_FAN:第一个顶点始终保持固定。从那时起,每组 2 个相邻顶点与第一个顶点形成一个三角形。因此,使用顶点流,您会得到一个三角形列表,如下所示: (0, 1, 2) (0, 2, 3), (0, 3, 4) 等。长度为 n 的顶点流将生成 n- 2 个三角形。

您的第一个场景描述了 GL_TRIANGLE_STRIP,而您的第二个场景描述了 GL_TRIANGLES

关于c++ - OpenGL实际上是如何读取索引的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59488382/

相关文章:

opengl - OpenGL坐标系是左手坐标系还是右手坐标系?

java - 尝试使用地形表示制作击剑 map

c++ - 如何使用 C++ 在 QT 中的 QInputDialog 中隐藏 "Cancel"按钮?

c++ - 如何将 vector 列表存储为全局变量?

c++ - 使用四元数进行切线空间法线映射 - 我遇到的问题

c++ - 在没有窗口的windows桌面上绘制OpenGL

c++ - 这种 CRC32 方法的大端兼容版本会是什么样子?

c++ - 错误: no match for call to ‘(std::fstream {aka std::basic_fstream<char>}) (const char*)’ Not fixed by c_str()

javascript - 如何从Three.js中给出X和Y的网格表面获取高程值(Z坐标)?

c# - 地形树实例无法正确设置