OpenGL教程:8. 摄像机坐标系

摄像机方向

摄像机是一种抽象的结构,它表示我们看东西的媒介,类似于眼睛。为了定义摄像机,我们给定摄像机的世界空间位置向量$\boldsymbol{eye}=(x_0,y_0,z_0,1)$,以及我们要观察的片元的世界空间位置向量$\boldsymbol{frag}$。

为了构建摄像机的坐标系,我们需要三个正交的基向量,而其中一个必须表示方向信息。首先可以计算出摄像机的方向向量:

image-20221020201410118

可以计算摄像机的视角方向向量,简称方向向量:

摄像机的右轴

现在有了第一个基向量$\boldsymbol{n}$,然后需要找到摄像机的右轴,充当其坐标系的第二个基向量。为此,我们要引用一个辅助向量$\boldsymbol{up}=(0,1,0)$,也就是上向量。进行叉乘,就可以得到第二个正交的基向量:

如图所示:

image-20221020202000743

摄像机的上轴

最后处理上轴,请问上轴是$\boldsymbol{up}$吗?不是!因为$\boldsymbol{up}$不一定与$\boldsymbol{n}$正交,因此我们还要找到上轴基向量!

非常简单,只需要:

如图所示:

image-20221020202159796

LookAt矩阵的推导

为了实现世界空间与观察空间的变换,我们需要引入一个矩阵。这就是LookAt矩阵的作用。

LookAt矩阵实现了将摄像机坐标系的基向量变换到世界坐标系的基向量。为此我们将进行推导。我们令:

其中$\boldsymbol{T}$是平移矩阵,$\boldsymbol{R}$是旋转矩阵。这个矩阵将进行摄像机坐标系基向量变换到世界坐标系基向量。

首先需要将摄像机平移到世界坐标原点,也就是将$\boldsymbol{eye}$向量平移到原点位置,不难知道平移矩阵的值:

因此:

平移到了原点。

接下来推导$\boldsymbol{R}$,$\boldsymbol{R}$是将摄像机坐标系的基向量旋转到世界坐标系的基向量的位置,即:

其中$\boldsymbol{\alpha=}\left[
\begin{array}{cccc}
0&0&0&1
\end{array}
\right]^T$。

但这样比较难计算,我们可以求$\boldsymbol{R^{-1}}$然后求逆矩阵就好了!也就是将世界坐标系的基向量变换到摄像机坐标系的基向量:

根据格拉姆-施密特正交化的理念,能够知道$\boldsymbol{R^{-1}}$是正交矩阵,转置矩阵等于逆矩阵,因此:


综上所述:

Author

InverseDa

Posted on

2022-11-07

Updated on

2023-03-30

Licensed under

Comments

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×