【发布时间】:2013-01-25 16:08:07
【问题描述】:
我有以下顶点着色器到rotate normals。在我实现之前,我还传递了网格的旋转矩阵来计算法线。那个时候的灯光还不错。
#version 150
uniform mat4 projection;
uniform mat4 modelview;
in vec3 position;
in vec3 normal;
in vec2 texcoord;
out vec3 fposition;
out vec3 fnormal;
out vec2 ftexcoord;
void main()
{
mat4 mvp = projection * modelview;
fposition = vec3(mvp * vec4(position, 1.0));
fnormal = normalize(mat3(transpose(inverse(modelview))) * normal);
ftexcoord = texcoord;
gl_Position = mvp * vec4(position, 1.0);
}
但是使用这个着色器,在片段着色器中计算的光照会随着相机转动。我没有更改片段着色器,所以问题应该在上面的代码中。
我在计算法线时做错了什么?
【问题讨论】:
-
"我没有更改片段着色器,所以问题应该在上面的代码中。" 或者,您的片段着色器总是破碎的。事实上,如果你的照明没有上面的代码工作,这表明你的照明根本没有工作。
-
@NicolBolas。它确实通过传递视图、模型和法线矩阵来工作,在法线矩阵没有应用平移的地方分开,而不是在着色器中计算法线矩阵。
标签: matrix glsl shader projection lighting