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