细分后如何查看生成的边?

How to see the generated edges after tessellation?

我正在尝试查看曲面细分着色器如何转换我的网格。我在网上看到了很多这样的图片,所以我知道这是可能的。

阅读 khronos wiki 似乎要生成与 GL_LINES 相同的行为,我应该像这样将补丁顶点设置为 2:

glPatchParameteri(GL_PATCH_VERTICES, 2)

然而,这会导致与

完全相同的输出
glPatchParameteri(GL_PATCH_VERTICES, 3)

换句话说,我看到的是实心三角形而不是线条。我正在使用 GL_PATCHES 绘图,但没有出现编译错误或运行时错误。

如何查看生成的边?

只需使用 glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );在你的初始化代码中。你也可以根据一些键调用它,这样你就可以在线框和多边形模式之间切换。

如果不能使用多边形模式,可以使用几何着色器。几何着色器是在曲面细分之后执行的阶段。因此,您可以拥有一个几何着色器,它以三角形作为输入并生成由三条线组成的线带作为输出。这将显示线框。不过,它也会绘制两次内边缘。

我想指出,这个问题代表了对 Tessellation 工作原理的严重误解。

面片中的顶点数 与 "how my mesh is being transformed by the tessellation shader" 无关

曲面细分基于抽象补丁。也就是说,如果你的TES使用三角形作为its abstract patch type,那么它会生成三角形。无论您的每个面片顶点数是 20 还是 2,这都是正确的。

TES 中代码的工作是弄清楚如何将抽象补丁的细分应用到补丁的顶点数据,以生成实际的细分输出顶点数据。

因此,如果您正在细分一个三角形,您的 TES 将获得一个 3 元素重心坐标 (gl_TessCoord),它确定抽象三角形中的位置以生成顶点数据。 tessellation primitive generator 的工作是决定生成哪些顶点以及如何将它们 assemble 转化为基元(三角形边连接)。

所以基本上,补丁顶点的数量与边连接图无关。唯一重要的是抽象补丁类型和应用于它的细分级别。