计算机图形学入门-变换

本专栏内容整理了GAMES101的计算机图形学课程的主要内容,作为我学习计算机图形学的一份复习备份或叫做笔记。内容中如有错误,或有其他建议,欢迎大家指出。

附上GAMES101计算机图形学课程:GAMES101: 现代计算机图形学入门正在上传…重新上传取消https://sites.cs.ucsb.edu/~lingqi/teaching/games101.htmlhttps://sites.cs.ucsb.edu/~lingqi/teaching/games101.html

GAMES101-现代计算机图形学入门-闫令琪_哔哩哔哩_bilibiliGAMES101-现代计算机图形学入门-闫令琪共计23条视频,包括:Lecture 01 Overview of Computer Graphics、Lecture 02 Review of Linear Algebra、Lecture 03 Transformation等,UP主更多精彩视频,请关注UP账号。正在上传…重新上传取消https://www.bilibili.com/video/BV1X7411F744https://www.bilibili.com/video/BV1X7411F744

计算机图形学中变换主要分为模型变换与视图变换;不同的变换组合可以用来制作动画,以及进行投影和光栅化。

本章记录的内容是3th.p,变形!!!
计算机图形学入门-变换_第1张图片

2D变换

要用矩阵描述变换需要先找到一个对应。即x'与x ;y‘ 与y 之间的关系

缩放变换(Scale Transform)

计算机图形学入门-变换_第2张图片

 x' = sx
 y' = sy

矩阵表示:\begin{bmatrix} x'\\ y' \end{bmatrix} = \begin{bmatrix} s & 0\\ 0 & s \end{bmatrix} \begin{bmatrix} x\\ y \end{bmatrix}

 计算机图形学入门-变换_第3张图片

反射(对称)变换(Reflection Transform)

相对于y轴进行一个反转
计算机图形学入门-变换_第4张图片

x' = -x
y = y

矩阵表示:\begin{bmatrix} x'\\ y' \end{bmatrix} = \begin{bmatrix} -1 & 0\\ 0 & 1 \end{bmatrix} \begin{bmatrix} x\\ y \end{bmatrix}

切变(Shear Transform)
水平位移在y=0处为0;水平位移是y=1处为a;垂直位移总是0
计算机图形学入门-变换_第5张图片
x' = x + ay
y' = y
矩阵表示:\begin{bmatrix} x'\\ y' \end{bmatrix} = \begin{bmatrix} 1 & a\\ 0 & 1 \end{bmatrix} \begin{bmatrix} x\\ y \end{bmatrix}

旋转变换(Rotate Transform

首先我们规定两件事:
1:任何时候我们说旋转都是描述的围绕(0,0)的旋转
2:默认旋转方向是逆时针方向;

计算机图形学入门-变换_第6张图片
x' = xcos\theta -ysin\theta
y'=xsin\theta +ycos\theta
矩阵表示:\begin{bmatrix} x'\\ y' \end{bmatrix} = \begin{bmatrix} cos\theta & -sin\theta\\ sin\theta & cos\theta \end{bmatrix} \begin{bmatrix} x\\ y \end{bmatrix}

利用两个特殊点(0,1),(1,0)进行旋转公式的推导
计算机图形学入门-变换_第7张图片

线性变换都可以使用矩阵乘法的形式进行表示:
线性变换:如果一个变换可以用一个矩阵乘以一个坐标而得到一个新的坐标来表示,则这种变换称为线性变换;以上的变换都是线性变换

计算机图形学入门-变换_第8张图片

 平移变换 计算机图形学入门-变换_第9张图片

x' = x+tx
y' = y+ty

思考:平移是线性变换吗?答案:平移不是线性变换,而是仿射变换。
仿射变换的矩阵表示:计算机图形学入门-变换_第10张图片

如果要用一个矩阵乘以坐标的形式来表示平移变换是否可以,该怎么表示?

让我们为二维的点增加一个维度;

点:\begin{bmatrix} x\\ y\\ 1 \end{bmatrix}​   则平移变换可以这么表示:\begin{bmatrix} x'\\ y'\\ \omega ' \end{bmatrix} =\begin{bmatrix} 1 &0 & tx\\ 0& 1 & ty\\ 0&0 & 1 \end{bmatrix} \begin{bmatrix} x\\ y\\ 1 \end{bmatrix} =\begin{bmatrix} x+tx\\ y+ty\\ 1 \end{bmatrix}
如果结果的w坐标为1或0则有效

这就使用了齐次坐标的内容

齐次坐标

齐次坐标就是将一个原本是n维的点或向量用一个n+1维向量来表示,是指一个用于投影几何里的坐标系统。

点:\begin{bmatrix} x\\ y\\ 1 \end{bmatrix}​          向量:\begin{bmatrix} x\\ y\\ 0 \end{bmatrix}​ (向量具有平移不变性,所以第三个数是0)

满足:
• 向量+ 向量= 向量
• 点– 点 = 向量
• 点 + 向量= 点
• 点 + 点 = ??

第四点是什么意思呢?
在齐次坐标中对于任何的二维点(x,y,w) 和(x/w,y/w,1)表示的是同一个点。
所以点 + 点在齐次坐标下表示的是两个点的中点。

所有的仿射变换都可以用齐次坐标的形式来表示:
仿射变换:线性变换 + 平移
计算机图形学入门-变换_第11张图片
仿射变换在齐次坐标中的表示:
计算机图形学入门-变换_第12张图片
左上角的a,b,c,d 是线性变换的参数,右边是平移的参数,在表示仿射变换的时候,最底下那行才是(0,0,1)

齐次坐标中的二维变换矩阵:
缩放:
计算机图形学入门-变换_第13张图片
旋转:
计算机图形学入门-变换_第14张图片

平移:
计算机图形学入门-变换_第15张图片​ 

这样一来,我们使用齐次坐标就可以很方便地把各种各样的变换给写成统一的表示形式。 

逆变换

M^{-1}在矩阵和几何意义上都是变换 M^{} 的逆
计算机图形学入门-变换_第16张图片
逆变换正好在数学的表示上就是乘以变换矩阵的逆矩阵
 

组合变换

思考下图的变换时怎么得到的(注意表盘和指针)
计算机图形学入门-变换_第17张图片​ 。。。。。。
在分析变换的时候需要注意
1:复杂的变换可以通过一系列简单的变换的组合来达到
2:变换的先后顺序很重要

于是对以上变换分析可以知道,可以通过先旋转后平移得到正确结果。由下图中可以看到,变换的先后顺序不同得到的结果不同(证实了矩阵的乘法不满足交换律)
计算机图形学入门-变换_第18张图片
一个向量的变换的数学书写要注意,向量在右边,向量所应用的变换矩阵需要在其左边。按先后顺序从右到左排列。

下方描述的是先应用旋转45度,后应用向右平移一个单位
计算机图形学入门-变换_第19张图片

变换的合成:可以使用矩阵乘法的结合律先将所有表示变换的矩阵相乘计算出一个表示所有变换的矩阵;
计算机图形学入门-变换_第20张图片

 变换的分解
计算机图形学入门-变换_第21张图片
上面的图中的变换,描述了,当一个图形的锚点不在原点上,我们需要先将其锚点移动到原点上,再经行旋转。再平移回去。
将其写成矩阵形式 ( 注意从右往左变换 ):T(c)\cdot R(\alpha )\cdot T(-c)

3D变换

三维空间中的变换同样需要使用齐次坐标;
点:\begin{bmatrix} x\\ y\\ z\\ 1 \end{bmatrix}          向量:\begin{bmatrix} x\\ y\\ z\\ 0\end{bmatrix}  (向量具有平移不变性,所以第四个数是0)

齐次坐标中,(x,y,z,w)是一个三维空间坐标,跟(x/w,y/w,z/w,1)表示的是同一个点
即:(x/w,y/w,z/w)

在齐次坐标中使用4*4的矩阵描述三维空间的仿射变换,左上角3*3描述的是线性变换,tx,ty,tz描述的是x,y,z上的平移量。
\begin{bmatrix} x'\\ y'\\ z'\\ 1 \end{bmatrix} = \begin{bmatrix} a & b & c & tx\\ d & e& f & ty\\ g & h& i & tz\\ 0 &0 &0 & 1 \end{bmatrix} \begin{bmatrix} x\\ y\\ z\\ 1 \end{bmatrix}
思考,齐次坐标中描述的仿射变换是先线性变换还是先平移;

缩放:

计算机图形学入门-变换_第22张图片

平移:

 计算机图形学入门-变换_第23张图片

 绕x,y,z轴的旋转:
计算机图形学入门-变换_第24张图片
绕y轴旋转时要注意与绕x和绕z有些不一样。因为z 叉乘 x 得到y;z在前面。

 在三维空间中分别绕x, y, z的旋转可以合成任何3D旋转。通过描述绕x,y,z的旋转角度的形式叫做欧拉角。
欧拉角欧拉角是表达旋转的最简单的一种方式,形式上它是一个三维向量,其值分别代表物体绕坐标系三个轴(x,y,z轴)的旋转角度。
思考:是否可以直接用空间中的一个向量作为旋转轴来描述任何旋转?
这就需要使用到罗德里格斯旋转公式。

 罗德里格斯旋转公式(Rodrigues' rotation formula)

罗德里格斯旋转公式是描述空间中向量V围绕向量K旋转的公式,

以向量n作为旋转轴,旋转\alpha度。
计算机图形学入门-变换_第25张图片

其几何推导过程:
计算机图形学入门-变换_第26张图片
如图所示,旋转后的向量Vrot 等于它的两个分量之和。所以我们只要研究这两个分量的变化情况再相加即可。其中平行于旋转轴的分向量在旋转过程中并不会发生变化,垂直于旋转轴K的分向量会随旋转角度而发生变化。可以说,整个变化的变向量都只在这个垂直于旋转轴的分向量上。那么我们只要计算这个旋转后的分向量再加上原来向量V平行于旋转轴的分向量即可。
计算机图形学入门-变换_第27张图片

下一节:https://blog.csdn.net/qq_40765480/article/details/128017757

你可能感兴趣的:(计算机图形学,线性代数,矩阵)