mat3
mat3
从各种输入(如 mat4、多个 vec3 或单个浮点数)构造或转换出一个 3x3 矩阵(mat3),是正确变换三维法线和执行二维仿射变换的核心。
核心优势
它将创建 3x3 矩阵的复杂逻辑(尤其是从模型视图矩阵生成法线矩阵)抽象化,确保了在物体被非均匀缩放时仍能得到正确的光照结果。同时,它也简化了在着色器中对 UV 坐标进行旋转、缩放、剪切等二维变换的操作。
常见用途
从模型视图矩阵(mat4)创建法线矩阵(normalMatrix)以正确变换法线
构建二维仿射变换矩阵,用于旋转、缩放或扭曲 UV 坐标
应用色彩校正矩阵(Color Correction Matrix)以实现调色(如乌贼墨、灰度)
通过截取 mat4 的左上角部分,将其降维为 mat3
如何调整
其视觉效果由输入决定。若用静态值构建一个色彩校正矩阵(如乌贼墨色调),图像会立刻应用固定的复古风格。若动态改变构成矩阵的输入向量(例如,用 `timer` 节点平滑改变其中一个颜色通道的贡献),则可以实现平滑的视觉过渡,如图像从全彩逐渐变为特定色调。
代码示例
1// 从模型视图矩阵创建法线矩阵,这对于正确计算光照至关重要
2const normalMatrix = mat3( modelViewMatrix ).inverse().transpose();
3
4// 将其应用于原始的法线向量
5const transformedNormal = normalMatrix.mul( normalLocal );