memoの左手转右手

说的是坐标系。
假设两个坐标系都是X向右,Y向上。那么,右手系的Z是从屏幕垂直向外,左手系的Z就是垂直屏幕向里。
向量假设是列向量。(OpenGL系的毛病啊,列向量,右手系,泪目)

先说结论

变换矩阵为:

\[S_z=\text{Diag}(1,1,-1,1)=\begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & -1 & 0 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix} \]

对于点或者向量来说:

\[v_{\text{RH}} = S_z \cdot v_{\text{LH}} \]

对于矩阵来说:

\[A_{\text{RH}} = S_z \cdot A_{\text{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

posted @ 2021-07-07 17:56  薛定谔の三味  阅读(53)  评论(0编辑  收藏  举报