前几天遇到一个旋转矩阵 谈一下它的构建

mat3 rotation = mat3(cross(up, -normal), up, -normal) ;//up 垂直于normal

 

 为什么呢

 

涉及的一个概念是基变换 

假设空间一个向量 它的三个坐标轴xyz

旋转这个向量, 同时保持轴相对于它的位置不变得到的新轴 为子空间的基底 这个变换叫基变换 

就是一个向量(比如这个子空间的单位向量)乘以刚刚这个矩阵得到它在父空间的位置

cross(up, -normal), up, -normal这个就是新的三个轴

 

游戏引擎架构 叶劲松译 page151