OpenGL 相机 LookAt 矩阵计算
原理: 相机的运动实际上是对世界坐标系中的物体进行反向运动变换 相机的运动矩阵与其他物体的变换矩阵类似 先缩放变换,再进行旋转,最后进行平移 所以 glm::lookAt 函数返回的是相机变换矩阵的逆矩阵 先对相机的平移矩阵求逆,然后乘以旋转矩阵的逆矩阵(参考计算矩阵乘积的逆矩阵公式) 注意事项: 相机矩阵的 Z轴 与相机的照射方向相反 glm 中的矩阵是列向量优先 正交矩阵的逆矩阵等于它的转置 刚体运动中变换矩阵的逆矩阵求解: 刚体运动变换矩阵: $$\begin{equation} T = \begin{bmatrix*}[c] R & t \newline 0^T & 1 \end{bmatrix*} \end{equation}$$ 分块矩阵求逆公式 $$\begin{equation} M = \begin{bmatrix*}[c] A & B \newline 0 & D \end{bmatrix*} \space\space\space\space M^{-1} = \begin{bmatrix*}[c] A^{-1} & -A^{-1}BD^{-1} \newline 0 & D^{-1} \end{bmatrix*} \end{equation}$$ 刚体运动变换矩阵的逆矩阵: $$\begin{equation} T^{-1} = \begin{bmatrix*}[c] R^{-1} & -R^{-1}t \newline 0^T & 1 \end{bmatrix*} = \begin{bmatrix*}[c] R^T & -R^Tt \newline 0^T & 1 \end{bmatrix*} \end{equation}$$ 方法一: glm::mat4 Camera::calculateLookAtMatrix() { // 1....