我正在进行每个片段的照明,并且当校正正常的矢量时,我得到了这个代码:vec3 f_normal = mat3(MVI) * normal;
其中MVI是:mat4 MVI = transpose(inverse(ModelViewMatrix));
。那么mat3(MVI)
陈述后的回报是什么?
答案 0 :(得分:14)
mat3(MVI) * normal
从4x4矩阵返回上3x3矩阵,并将法线乘以该矩阵。该矩阵称为“正常矩阵”。您可以使用它将法线从世界空间带到眼睛空间。矩阵的上3x3部分对于缩放和旋转很重要,而其余部分仅用于平移(法线从不翻译)
要从世界空间到眼睛空间采用法线,您只需要模型视图矩阵的3x3 逆转置。除非你的矩阵在正常情况下(没有非均匀尺度),否则原始矩阵与其反转置相同。
答案 1 :(得分:3)
从GLSL types:“从另一个矩阵进行矩阵构造时,对大小没有限制。所以你可以用2x4矩阵构造一个4x2矩阵;只复制相应的元素。” EM>。因此,你得到了MVI左上角的3x3子矩阵。