游戏中的数学(1)

线性变换

如果有一个函数 $f(v)$ 有且具有

$f(v) = f(x,y,z) = (x’,y’,z’)$

$f(v+u) = f(v) + f(u)$
$f(kv) = kf(v)$

则称 $f(v)$ 为线性变换.

比方说存在某个函数 $f(x,y,z)$ = $(x^2,y^2,z^2)$ 显然有 $f(kv)$ = ${k^2}f(v)$ 则 $f(x,y,z)$ 不是线性变换

对于一个三维向量$v$,我们可以将它表示为$v=xi+yj+zk$ , 其中$i,j,k$是三个基向量.

如果$f(v)$ 是一种线性变换,根据其性质,我们能得到$f(v)=f(xi+yj+zk) = xf(i)+yf(j)+zf(k)$

由此我们可以将其矩阵化表示为

又因为f(v)的结果是一个3维的向量,因此

这事儿就成了

世界矩阵

将世界矩阵作用于顶点.

为了构建2D的图像,我们将这台虚拟摄像机架设在场景中.该摄像机确定了观察的可见视野,也就是生成2D图像所需的场景空间范围。摄像机所在的观察空间转换为对应的观察空间.

分别为摄像机的位置和三个旋转轴的方向.则我们得到了一个从观察空间中的坐标到世界空间中的坐标的世界矩阵.显然,此时我们需要的是它的逆过程.也即是世界空间到观察空间的变换.
现有:

因为是摄像机,所以不考虑缩放的情况,则有

我们可求得从世界空间到观察空间的变换亦即其逆过程为

考虑T是平移变换的逆矩阵,R是旋转变换的逆矩阵.则观察矩阵的形式为

假定摄像机的位置是Q,观察的目标是T则相机的观察方向为,世界空间的向上轴为j

很轻易地我们得到了表达相机另外两个轴的向量

如此我们就可以表达世界空间到观察空间的观察矩阵(View Matrix)

若点D为观察空间内一点(z,y),截面在YOZ上的投影EF离原点的距离为d.
显然可得