我有一个小程序可以从一些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我添加更多三角形,我需要计算新法线,所以我认为我必须使用triangles_adjacency选项计算gs,所以我可以访问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的工作。
然而,我的目标是在曲面细分后计算新的法线;谁能最终帮助我计算它们?