定义相机

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2332df3b-7a09-49fd-93dc-55db9277d2f6/Untitled.png

定义一个相机需要三个变量,位置,朝向,和一个向上的方向。

视图变换

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2dbd3f56-afbd-4662-8b6b-308c947e6d9c/Untitled.png

当相机和要拍的东西一起移动的时候,那拍出来的相片是一样的。也就是说,当我们移动物体时,只要同时以相同的方式移动相机,没有相对位置,那么得出来的结果就是一样的。

如果我们将相机放在一个固定的位置上,那么所有东西在移动时,都可以认为是其他东西在移动,而相机一直在位置上不动。

我们可以将相机变换原点上,对其他东西也都加上相同变换,这样相机和物体的相对位置就不会变了。我们让相机永远往 $-z$ 方向看,以 $y$ 轴为向上方向(右手坐标系,符合 OpenGL 传统)。这是约定俗成的。相机放在原点上会有很多好处,能简化计算。

从坐标空间的角度来看,就是将物体和相机从世界空间转到观察空间(摄像机空间)。

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/1ff99d52-c5c1-4820-8a85-393663a179a3/Untitled.png

我们要将相机移到原点,就需要先把相机中心 $e$ 平移到原点,还得把观察的方向 $g$ 移到 $-z$ 上,再把向上方向 $t$ 旋转到 $y$ 方向上,把 $\hat{g}\times \hat{t}$ 的方向移到 $x$ 方向上。

下面将这系列操作转为矩阵操作。

求视图变换矩阵

  1. 先把相机中心 $e$ 平移到原点

$M_{v i e w}$ in math?

$$ T_{v i e w}=\left[\begin{array}{cccc}1 & 0 & 0 & -x_{e} \\ 0 & 1 & 0 & -y_{e} \\ 0 & 0 & 1 & -z_{e} \\ 0 & 0 & 0 & 1\end{array}\right] $$