Look At 矩阵理解

learnOpenGL camera

glm库中有实现好的lookAt矩阵,我们要做的只是定义一个摄像机位置,一个目标位置和一个表示世界空间中的上向量的向量(我们计算右向量使用的那个上向量)

glm::mat4 view; 
view = glm::lookAt(glm::vec3(0.0f, 0.0f, 3.0f), 
        glm::vec3(0.0f, 0.0f, 0.0f),
        glm::vec3(0.0f, 1.0f, 0.0f));

lookAt函数实现的是下面这个矩阵

LookAt=[RxRyRz0UxUyUz0DxDyDz00001][100Px010Py001Pz0001]LookAt = \begin{bmatrix} \color{red}{R_x} & \color{red}{R_y} & \color{red}{R_z} & 0 \\ \color{green}{U_x} & \color{green}{U_y} & \color{green}{U_z} & 0 \\ \color{blue}{D_x} & \color{blue}{D_y} & \color{blue}{D_z} & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} * \begin{bmatrix} 1 & 0 & 0 & -\color{purple}{P_x} \\ 0 & 1 & 0 & -\color{purple}{P_y} \\ 0 & 0 & 1 & -\color{purple}{P_z} \\ 0 & 0 & 0 & 1 \end{bmatrix}

Look At 矩阵理解

位移矩阵好理解,生成一个沿相机反方向移动的矩阵即可

[100Px010Py001Pz0001]\begin{bmatrix} 1 & 0 & 0 & -\color{purple}{P_x} \\ 0 & 1 & 0 & -\color{purple}{P_y} \\ 0 & 0 & 1 & -\color{purple}{P_z} \\ 0 & 0 & 0 & 1 \end{bmatrix}

重点看下坐标的旋转矩阵

[RxRyRz0UxUyUz0DxDyDz00001]\begin{bmatrix} \color{red}{R_x} & \color{red}{R_y} & \color{red}{R_z} & 0 \\ \color{green}{U_x} & \color{green}{U_y} & \color{green}{U_z} & 0 \\ \color{blue}{D_x} & \color{blue}{D_y} & \color{blue}{D_z} & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}

它实际上是相机旋转矩阵的逆矩阵,即对将相机旋转

[RxUxDx0RyUyDy0RzUzDz00001]\begin{bmatrix} \color{red}{R_x} & \color{green}{U_x} & \color{blue}{D_x} & 0 \\ \color{red}{R_y} & \color{green}{U_y} & \color{blue}{D_y} & 0 \\ \color{red}{R_z} & \color{green}{U_z} & \color{blue}{D_z} & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}

补充说明下,上面这个为什么是相机旋转:

空间变换时,变换矩阵的本质就是基向量的变换,原始的基向量可以看成(先不管齐次坐标):

[1000010000100001]\begin{bmatrix} \color{red}{1} & \color{green}{0} & \color{blue}{0} & 0 \\ \color{red}{0} & \color{green}{1} & \color{blue}{0} & 0 \\ \color{red}{0} & \color{green}{0} & \color{blue}{1} & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}

Look At 矩阵理解

反向作用到物体上,即对上面的矩阵求逆,因为该矩阵是正交单位矩阵,所以逆和转置相等

原文链接:https://juejin.cn/post/7231850971869462589 作者:sumsmile

(0)
上一篇 2023年5月12日 上午11:01
下一篇 2023年5月12日 上午11:11

相关推荐

发表回复

登录后才能评论