Opengl 具有GL_三角形_邻接性_外部的细分和几何体着色器

Opengl 具有GL_三角形_邻接性_外部的细分和几何体着色器,opengl,geometry-shader,tessellation,Opengl,Geometry Shader,Tessellation,我有一个小程序,从一些SRTM数据渲染地形 我在玩glsl的新特技。 我已成功创建了一个vs、tcs、tes、gs和fs,其中gs只是一个具有以下特性的直通着色器: #version 430 layout(triangles_adjacency) in; layout(triangle_strip, max_vertices = 3) out; void main(void) { for (int i = 0; i < gl_in.length(); ++i) {

我有一个小程序,从一些SRTM数据渲染地形

我在玩glsl的新特技。 我已成功创建了一个vs、tcs、tes、gs和fs,其中gs只是一个具有以下特性的直通着色器:

#version 430
layout(triangles_adjacency) in;
layout(triangle_strip, max_vertices = 3) out;

void main(void) {
    for (int i = 0; i < gl_in.length(); ++i) {
        gl_Position = gl_in[i].gl_Position;
        EmitVertex();
    }
    EndPrimitive();
}
没有什么是吸引人的。我知道,如果我激活了细分,我必须在绘制阵列中使用GL_面片(我是这样制作的),但我不知道我能做些什么才能看到这项工作


然而,我的目标是在细分后计算新法线;有人最终能帮我在哪里计算它们吗?

好吧,你说你的GS输入是4个三角形,所以你也应该发射4个三角形,而不仅仅是一个。三角形是4个,因为我使用三角形邻接,但我不知道我是否也必须发射其他三个三角形的顶点。
#version 430
layout(triangles_adjacency) in;
layout(triangle_strip, max_vertices = 3) out;

void main(void) {

    gl_Position = gl_in[0].gl_Position;
    EmitVertex();

    gl_Position = gl_in[2].gl_Position;
    EmitVertex();

    gl_Position = gl_in[4].gl_Position;
    EmitVertex();

    EndPrimitive();

}