transformDirection
transformDirection
用于在不同坐标空间(如模型空间到视图空间)之间正确地变换方向向量(如法线),尤其能正确处理非均匀缩放下的变换,并自动将结果归一化。
核心优势
能保证法线等方向向量在非均匀缩放变换后的正确性,对于精确光照至关重要,同时通过封装和自动归一化简化了着色器代码。
常见用途
动态光照计算
环境贴图反射与折射
各向异性着色
如何调整
通过改变输入的 `direction` 向量或 `matrix` 矩阵来调整。将矩阵从 `normalMatrix` 换成 `modelWorldMatrix` 会在非均匀缩放时导致错误光照;将输入法线取反 (`normalLocal.negate()`) 会使光照内外翻转;使用固定向量代替 `normalLocal` 可创造出基于对象自身方向的风格化着色效果。
代码示例
1// 使用 transformDirection 将局部法线转换到视图空间
2// normalLocal: 模型自带的、在局部空间中的法线向量
3// normalMatrix: 用于正确变换法线的特殊矩阵
4const normalView = transformDirection( normalLocal, normalMatrix );