May 26, 2022
Трансформация нормалей
Для трансформации нормалей на объекте с отрицательным скейлом метод Unity transform.TransformDirection() дает некорректный результат. Вместо него нужно использовать более дорогой, но правильный код
public static Vector3 TransformDir(Transform transform, Vector3 dir){
var matrix = transform.localToWorldMatrix;
var matrixInverse = matrix.inverse;
var matrixTranspose = matrixInverse.transpose;
var n = (Vector3) (matrixTranspose * dir);
return n;
}Подробное объяснение в главе 4.5 книги Mathematics for 3D Game Programming and Computer Graphics