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

时间:2018-11-15 16:08:45

标签: c++ graphics opengl-es glsl tessellation

我正在尝试了解镶嵌细分着色器如何转换我的网格。我在网上看到了多张图片,所以我知道这是可能的。

读取khronos wiki似乎要产生与GL_LINES相同的行为,我应该将补丁顶点设置为2,如下所示:

glPatchParameteri(GL_PATCH_VERTICES, 2)

但是,结果与

完全相同
glPatchParameteri(GL_PATCH_VERTICES, 3)

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

如何查看生成的边缘?

3 个答案:

答案 0 :(得分:4)

如果无法使用多边形模式,则可以使用几何着色器。几何着色器是细分后执行的阶段。因此,您可以拥有一个几何着色器,该着色器将三角形作为输入并产生三条线的线带作为输出。这将显示线框。不过,它还会绘制两次内部边缘。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

我想指出的是,这个问题代表了对镶嵌细分的工作原理的误解。

补丁中的顶点数量与“镶嵌细分着色器如何变换网格”无关。

镶嵌基于抽象补丁。也就是说,如果您的TES使用三角形作为its abstract patch type,则它将生成三角形。无论您的每补丁顶点数是20还是2,这都是事实。

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

因此,如果要对三角形进行细化,则TES将获得3元素的重心坐标(gl_TessCoord),该坐标确定抽象三角形中要为其生成顶点数据的位置。 tessellation primitive generator的工作是确定要生成哪些顶点以及如何将它们组装为图元(三角形边缘连接)。

因此,基本上,补丁顶点的数量与边缘连接图无关。唯一重要的是抽象补丁类型和对其应用的细分级别。