いくつかの 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 で三角形の隣接オプションを使用して計算する必要があると思うので、4 つの三角形の 6 つの頂点にアクセスできます。しかし、コードを変更すると:
#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 の動作を確認するために何ができるかわかりません。
ただし、私の目標は、テッセレーション後に新しい法線を計算することです。誰かが最終的にどこで計算するのを手伝ってくれますか?