memoの左手转右手
说的是坐标系。
假设两个坐标系都是X向右,Y向上。那么,右手系的Z是从屏幕垂直向外,左手系的Z就是垂直屏幕向里。
向量假设是列向量。(OpenGL系的毛病啊,列向量,右手系,泪目)
先说结论
变换矩阵为:
[S_z= ext{Diag}(1,1,-1,1)=egin{bmatrix}
1 & 0 & 0 & 0 \
0 & 1 & 0 & 0 \
0 & 0 & -1 & 0 \
0 & 0 & 0 & 1 \
end{bmatrix}
]
对于点或者向量来说:
[v_{ ext{RH}} = S_z cdot v_{ ext{LH}}
]
对于矩阵来说:
[A_{ ext{RH}} = S_z cdot A_{ ext{LH}} cdot S_z
]
简单示例代码如下:
Vector3 v_LH(x_LH, y_LH, z_LH);
Matrix4 A_LH(
a11, a12, a13, a14,
a21, a22, a23, a24,
a31, a32, a33, a34,
a41, a42, a43, a44);
Vector3 v_RH(x_LH, y_LH, -z_LH);
Matrix4 A_RH(
a11, a12, -a13, a14,
a21, a22, -a23, a24,
-a31, -a32, a33, -a34,
a41, a42, -a43, a44);
参考文献:Conversion of Left-Handed Coordinates to Right-Handed Coordinates