GLSL中法线贴图的正态模型矩阵计算

时间:2012-12-11 16:32:58

标签: opengl matrix glsl

我需要计算一个普通的模型矩阵,用于在GLSL着色器中进行法线贴图。我想确保我是对的:当我将视图(相机模型)矩阵与几何模型矩阵相乘时,视图矩阵应该已经被反转了吗?从herehere找到的在线示例中并不清楚。此外,我发现在某些情况下,人们也会转换结果矩阵。为什么?那么在OpenGL中构建普通模型矩阵的正确方法是什么?

目前我这样做:

glm::mat4 view = inverse(GetCameraModel());
glm::mat3 normalModelMatr= glm::mat3(view * mesh.GetModel());

这是要走的路吗?

1 个答案:

答案 0 :(得分:5)

正确的法线矩阵是模型 - 视图矩阵的逆转置。如果不进行任何非均匀缩放,即按不同的比例缩放轴,矩阵的倒数等于其转置,因为它是orthogonal。 因此,两个操作取消,它只是原始矩阵。

如果你做了非均匀比例,矩阵不是正交的,你必须进行逆转置。

你采用顶部的3x3矩阵,因为你只需要旋转和缩放法线,而不是平移。

因此,只要不采用非均匀缩放,您的正常矩阵就是正确的。