我的茶壶的顶点法线没有按预期变换。我怀疑法线矩阵没有在正确的坐标空间中变换。我想更多地了解这个问题以及如何解决它。
下面是演示问题的图像链接以及我用来绘制顶点法线的 GLSL 源代码。
茶壶:http://i.imgur.com/7gENzpO.png
近距离观察茶壶:http://imgur.com/aiWwVll.png
当我旋转相机时,带圆圈的顶点法线也会旋转:http://imgur.com/6laONRj.png
顶点.glsl:
attribute vec3 v_Position; /* vertex position in model space */
attribute vec3 v_Normal; /* vertex normal vector in model space */
uniform mat4 v_ModelViewMatrix; /* model space to world space to eye space transform */
uniform mat4 v_ProjectionMatrix; /* eye space to clip space transform */
out VS_OUT {
vec3 normal; /* vertex normal in eye space. */
} vs_out;
void main(void)
{
vec4 WorldPosition = v_ModelViewMatrix * vec4(v_Position.xyz, 1.0);
/* I know it's bad to compute this on the GPU but I wanted to be sure my matrix routines were not to blame. */
mat3 NormalMatrix = transpose(inverse(mat3(v_ModelViewMatrix)));
vs_out.normal = normalize(NormalMatrix * v_Normal);
gl_Position = v_ProjectionMatrix * WorldPosition;
}
几何.glsl
layout(triangles) in;
layout(line_strip, max_vertices = 2) out;
in VS_OUT {
vec3 normal;
} gs_in[];
void main(void)
{
gl_Position = gl_in[0].gl_Position;
EmitVertex();
gl_Position = gl_in[0].gl_Position + 0.1 * vec4(gs_in[0].normal, 0.0);
EmitVertex();
EndPrimitive();
}
提前致谢。
最佳答案
请注意,在您的几何着色器中,gl_in[0].gl_Position 在剪辑空间中,而 gs_in[0].normal 在眼睛空间中。您可能想在几何着色器中进行投影。
关于c - 为什么我的顶点法线会随着相机旋转而旋转?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35397677/