假设有两个坐标系,一个叫“物体坐标系(局部坐标系)“,一个叫“世界坐标系”,物体需要知道它自己在世界中的位置和方向,那么才可以让多个物体有序在这世界中显示:
R
| r0 u0 a0 0 |
| r1 u1 a0 0 |
| r2 u2 a0 0 |
| 0 0 0 1 |
T
| 1 0 0 t0 |
| 0 1 0 t1 |
| 0 0 1 t2 |
| 0 0 0 1 |
旋转矩阵R,代表物体在世界坐标系中的方位(朝向)
平移矩阵T,代表物体在世界坐标系中的位置
MatrixLocalWorld=TxR
| r0 u0 a0 t0 |
| r1 u1 a0 t1 |
| r2 u2 a0 t2 |
| 0 0 0 1 |
V为物体的任一顶点
V' = MxV将物体”摆放“到了世界中的位置T。
现在考虑从世界坐标系转换到物体坐标系,但更常见的是世界坐标系转换到摄像机坐标系,那我们还是可以基于刚才的R和T来讨论。
MatrixWorldCamera=Inv(TxR)=InvR x InvT
| r0 r1 r2 -(t0r0+t1r1+ t2r2) |
| u0 u1 u2 -(t0u0+t1u1+ t2u2) |
| a0 a1 a2 -(t0a0+t1a1+t2a2) |
| 0 0 0 1 |
直观的讲,vector(r0, r1, r2)就是摄像机的x坐标(或者右方向)在世界坐标系中的方向向量,u和a则分别对应y和z坐标(上和LookAt),再把摄像机换回物体,那么在一开始的R中为什么叫r, u, a就可以解释了。