现代计算机图形学入门(1)

概述、线代与变换

现代计算机图形学入门(1)

概述

应用领域:电子游戏、电影、动画、设计、可视化、VR、AR、Digital Illustration、仿真、GUI、字体。

线性代数复习

向量的点积Dot Product

image-20200709110002655.png

主要用处是计算向量的夹角,进而可以计算一个向量在另一向量上的投影,同时因为cos的正负,可以判断其前后关系。

向量的叉积Cross Product

image-20200709110558208.png

使用右手法则计算叉积。此外,也可以使用矩阵进行运算:

image-20200709110812197.png

使用叉积可以判断向量ab的左右顺序,进而可以判断点在三角形的内或者外。

image-20200709110959097.png

矩阵

矩阵的乘法:

image-20200709111445839.png

左行乘右列

用矩阵计算点积和叉积

image-20200709112242200.png

变换

2D变换

缩放

image-20200709114957068.png

镜像

image-20200709142054172.png

切变

image-20200709142117452.png

旋转

image-20200709142446365.png

上面所有的变换,都可以写成,也即是线性变换:

image-20200709143103563.png

但是平移变换无法使用这个矩阵运算出来,为了解决这个事情,加入了齐次变换的概念。

image-20200709150803078.png

齐次变换和仿射变换的关系:

image-20200709151814461.png

逆变换:求逆矩阵(逆矩阵双方满足交换律)

3D变换

2D变换的推广

image-20200709162531210.png

缩放

image

位移

image-20200713163207564.png

旋转

image-20200713163228310.png

之所以y的符号和x、z相反,是因为x轴是由y轴叉乘z轴取负号,z轴是由x轴叉乘y轴取负号,而y轴则是由x轴叉乘z轴(右手定理)。

三维旋转往往会分解为三个独立的旋转:

image-20200713164203667.png

罗德里格斯旋转公式:

image-20200713164254432.png

先看推导:

image-20200713170355488.png

然后转换成矩阵形式,就是上面的罗德里格斯公式。

注:旋转以后的向量表示为 v`=Rv,R是变化矩阵。只需要将其带入,带入内积和外积的公式即可。

2:点乘可以得到向量内积,叉乘可以得到向量外积,而对于向量很言,张量积和外积是等效的。

观测变换Viewing Transformation

首先,线定义一个相机:需要位置、look-at/gaze direction、以及up direction。我们定义相机在(0,0,0)上,并且永远向着-z轴看,向上是y轴方向。

因为这个原理,所以相机旋转矩阵的逆很好写,然后因为旋转矩阵是正交矩阵,所以他的逆矩阵就是它的转置:

image-20200714145141241.png

投影变换Projection Transformation

分为正交投影orthographic projection和透视投影perspective projection

image-20200714150107439.png
正交投影

理解:按之前说的将摄像机变换到原点,然后将物体的z轴数据都扔掉,就是其正交投影。

真正的做法:先左平移,然后将其缩放为一个单位立方体。

image-20200714150845887.png
透视投影

根据之前对于齐次坐标系的知识,(x,y,z,1)与(kx,ky,kz,k)是同一个点(k!=0),易得,(xz,yz,z^2,z)也是同一个点。

经过挤压之后,得到前后的坐标对应关系:

image-20200714175854059.png

带入xz,可以发现:

image-20200714180656445.png

则可以反推变换矩阵:

image-20200714180810723.png

通过观察发现:对于任何一个点,不管远近平面,z值都是不变的。

关于z不变的理解:近的平面z`=n,远的平面z`=z,所以在远近平面上,z都是不变的。但是

对于近平面的点:

image-20200714182728994.png

易推:

image-20200714182813042.png

对于远平面的点:

我们取特殊点:远平面的中心店(x=y=0):

image-20200714183113506.png

于是可以联解出矩阵这个挤压的矩阵。解出之后,在进行正交变换,就可以得到目标矩阵。

Mpersp = MorthoMpersp→ortho

最后,一个公式的绘图网址:https://www.mathcha.io/

最后编辑于
文章链接: http://pheustal.com/2020/07-09/CG1
本作品采用CC-BY-SA许可。