glsl中的提取mat3(mat4矩阵)语句有什么用?

Bìn*_*yên 13 opengl glsl

我正在做一个每片段照明,当纠正正常的时候,我得到了这个代码:vec3 f_normal = mat3(MVI) * normal;MVI在哪里:mat4 MVI = transpose(inverse(ModelViewMatrix));.那么什么是mat3(MVI)声明后的回报?

Ste*_*vel 14

mat3(MVI) * normal
Run Code Online (Sandbox Code Playgroud)

从4x4矩阵返回上3x3矩阵并将法线乘以该矩阵.该矩阵称为"正常矩阵".您可以使用它将法线从世界空间带到眼睛空间.矩阵的上3x3部分对于缩放和旋转很重要,而其余部分仅用于平移(并且法线永远不会被翻译)

要从世界空间到眼睛空间采取法线,您只需要模型视图矩阵的3x3 逆转置.除非你的矩阵在正常情况下(没有非均匀尺度),否则原始矩阵与其反转置相同.