2

我有一个小程序可以从一些 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();
}

现在,在 tcs 和 tes 中我添加了更多的三角形,我需要计算新的法线,所以我认为我必须在 gs 中使用 triangles_adjacency 选项进行计算,这样我就可以访问 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();

}

没有什么是平局。我知道,如果我激活了曲面细分,我必须在绘制数组中使用 GL_PATCHES(我以这种方式制作),但我不明白我该怎么做才能看到这个 gs 的工作。

但是我的目标是在细分后计算新的法线;谁能最终帮助我在哪里计算它们?

4

0 回答 0