to HW121:
directX sdk文档上写的VIEW MATRIX转换,右手视图坐标生成,
用的怎麽是
struct Vector { int x, y, z };
struct Matrix { int a11,a12,a13; int a21,a22,a23; int a31,a32,a33; };
V = V '* M
V.x = v '.x*M.a11 + v '.x*M.a12 + V '.x*M.a13;
V.y = v '.y*M.a21 + v '.y*M.a22 + V '.y*M.a23;
V.z = v '.z*M.a31 + v '.z*M.a32 + V '.z*M.a33;
对3维坐标变换应该用4*4的矩阵,这样可以把平移、旋转、缩放等操作都用4*4的矩阵表示。
相应的坐标向量就加一个量w,即X = [x y z w]^T,w=1
平移操作
[1 0 0 Tx]
[0 1 0 Ty] = T
[0 0 1 Tz]
[0 0 0 1]
上面的矩阵T左乘坐标向量X就得平移后的向量X',X' = T X
绕x轴旋转
[1 0 0 0]
[0 cos t -sin t 0] = Rx
[0 sin t cos t 0]
[0 0 0 1]
绕y轴旋转
[cos t 0 sin t 0]
[0 1 0 0] = Ry
[-sin t 0 cos t 0]
[0 0 0 1]
绕z轴旋转
[cos t -sin t 0 0]
[sin t cos t 0 0] = Rz
[0 0 1 0]
[0 0 0 1]
然后就根据操作顺序,把矩阵依次相乘就得变化后的坐标。
比如先沿x轴平移10个单位,再绕x轴旋转30,再绕y轴选择-30度,那变换就是
Ry * Rx * T * X
其中矩阵中Tx = 10,Rx中的t=30,Ry中的t=-30