使用 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_STRIP
s。您应该在渲染时遇到 GL_INVALID_OPERATION
错误。
每个 N
顶点将被视为要细分的单个面片,其中 N
由 TCS 或调用 glPatchParameteri(GL_PATCH_VERTICES, N);
定义。这很像 GL_TRIANGLES
:每 3 个顶点是一个三角形。每个补丁都与其他所有路径完全分开。所以如果 N
是 4,那么绘制 8 个顶点将生成 2 个面片。
这意味着将 primitive restart 与曲面细分结合使用确实没有任何意义。
我正在尝试使用曲面细分和原始重启索引绘制立方体。通过使用原始重启索引,我可以将索引计数减少到 17,并使用如下内容绘制立方体:
glEnable(GL_PRIMITIVE_RESTART);
glPrimitiveRestartIndex(0xFFFF);
glDrawElements(GL_TRIANGLE_STRIP, 17, GL_UNSIGNED_SHORT, NULL);
所以,在这种情况下,我得到了奇怪的结果,但是使用 36 个索引和 GL_TRIANGLES
类型绘制立方体效果很好。
如何在 glPrimitiveRestartIndex()
中使用曲面细分?
只有一种原始类型可用于细分:GL_PATCHES
。所以你不能镶嵌 GL_TRIANGLE_STRIP
s。您应该在渲染时遇到 GL_INVALID_OPERATION
错误。
每个 N
顶点将被视为要细分的单个面片,其中 N
由 TCS 或调用 glPatchParameteri(GL_PATCH_VERTICES, N);
定义。这很像 GL_TRIANGLES
:每 3 个顶点是一个三角形。每个补丁都与其他所有路径完全分开。所以如果 N
是 4,那么绘制 8 个顶点将生成 2 个面片。
这意味着将 primitive restart 与曲面细分结合使用确实没有任何意义。