我有一个小程序可以从一些 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 的工作。
但是我的目标是在细分后计算新的法线;谁能最终帮助我在哪里计算它们?