私は現在、独自の GLSL シェーダーを作成しており、スムーズなシェーディングが必要でした。シェーディングは、VBO に送信する前に法線を計算したときに機能しましたが、ここでの問題は、ボーン マトリックスを使用してアニメーションを実装すると、法線が正しくないことです。
ジオメトリ シェーダを使用して法線を計算していますが、法線を滑らかにする方法がわかりません。
ここに私のジオメトリシェーダーがあります:
#version 150
layout(triangles) in;
layout (triangle_strip, max_vertices=3) out;
in vec2 texCoord0[3];
in vec3 worldPos0[3];
out vec2 texCoord1;
out vec3 normal1;
out vec3 worldPos1;
void main()
{
vec3 n = cross(worldPos0[1].xyz-worldPos0[0].xyz, worldPos0[2].xyz-worldPos0[0].xyz);
for(int i = 0; i < gl_in.length(); i++)
{
gl_Position = gl_in[i].gl_Position;
texCoord1 = texCoord0;
normal1 = n;
worldPos1 = worldPos0;
EmitVertex();
}
}
法線を計算する面の隣に面が必要ですが、それらを取得する方法がわかりません。