memoの左手转右手

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

原文地址:https://www.cnblogs.com/daiday/p/14982761.html