使用 glPrimitiveRestartIndex() 进行曲面细分?

Tessellation with glPrimitiveRestartIndex()?

我正在尝试使用曲面细分和原始重启索引绘制立方体。通过使用原始重启索引,我可以将索引计数减少到 17,并使用如下内容绘制立方体:

glEnable(GL_PRIMITIVE_RESTART);
glPrimitiveRestartIndex(0xFFFF);
glDrawElements(GL_TRIANGLE_STRIP, 17, GL_UNSIGNED_SHORT, NULL);

所以,在这种情况下,我得到了奇怪的结果,但是使用 36 个索引和 GL_TRIANGLES 类型绘制立方体效果很好。

如何在 glPrimitiveRestartIndex() 中使用曲面细分?

只有一种原始类型可用于细分:GL_PATCHES。所以你不能镶嵌 GL_TRIANGLE_STRIPs。您应该在渲染时遇到 GL_INVALID_OPERATION 错误。

每个 N 顶点将被视为要细分的单个面片,其中 N 由 TCS 或调用 glPatchParameteri(GL_PATCH_VERTICES, N); 定义。这很像 GL_TRIANGLES:每 3 个顶点是一个三角形。每个补丁都与其他所有路径完全分开。所以如果 N 是 4,那么绘制 8 个顶点将生成 2 个面片。

这意味着将 primitive restart 与曲面细分结合使用确实没有任何意义。