Transformation

Transformation

  • Transformation
  • 1. Why do we study transformation?
  • 2. 2D Transformations
    • 2.1 Scale Transform
    • 2.2 Reflection Transform
    • 2.3 Shear Transform
    • 2.4 Rotation Transform
    • 2.5 Linear Transform
    • 2.6 Inverse Transform
    • 2.7 Composite Transform
    • 2.8 Decomposing Complex Transform
  • 3. Homogeneous Coordinate
  • 4. 3D Transformations
    • 4.1 Scaling,Translation
    • 4.1 Rotation
      • 4.1.1 Fixed axes
      • 4.1.2 Euler
      • 4.1.3 Rodrigues
      • 4.1.4 Quaternion
  • 5. Viewing transformation(观测变换)
    • 5.1 View(视图)/Camera transformation
    • 5.2 Projection(投影)transformation
      • 5.2.1 Orthographic(正交) projection
      • 5.2.2 Perspective(透视)projection

Transformation

笔记来源:GAMES101-现代计算机图形学入门-闫令琪

1. Why do we study transformation?

Modeling Transformation(模型变换)、Viewing Transformation(视图变换)
Modeling:translation

Modeling:rotation

Modeling:scaling
Transformation_第1张图片
Viewing:(3D to 2D)projection
Transformation_第2张图片

2. 2D Transformations

representing transformations using matrices

rotation、scale、shear

2.1 Scale Transform

Transformation_第3张图片
Scale Transform
x ′ = s x   y ′ = s y x'=sx\\~ y'=sy x=sx y=sy
Scale Matrix
Transformation_第4张图片
Transformation_第5张图片

2.2 Reflection Transform

Reflection Matrix
Transformation_第6张图片

2.3 Shear Transform

Shear Matrix
Transformation_第7张图片

2.4 Rotation Transform

Transformation_第8张图片
Transformation_第9张图片

2.5 Linear Transform

Linear Transforms = Matrices (of the same dimension)
Transformation_第10张图片

2.6 Inverse Transform

Inverse Transform
Transformation_第11张图片

2.7 Composite Transform

Composite Transform(组合变换)
Transformation_第12张图片
Transformation_第13张图片
变换顺序很重要,由于矩阵乘法一般不满足交换律 A ⋅ B ≠ B ⋅ A A\cdot B\neq B\cdot A AB=BA
从右向左变换
Transformation_第14张图片
多次变换,可以从 A 1 A_1 A1 A n A_n An先乘起来得到一个矩阵,让这个矩阵乘向量,把向量做变换
Transformation_第15张图片

2.8 Decomposing Complex Transform

移动图形使得其某一点处于原点,对其进行旋转操作,最后再次移动会原来位置
Transformation_第16张图片

3. Homogeneous Coordinate

translation
Transformation_第17张图片
Transformation_第18张图片
无法使用一个矩阵表示平移变换(不是线性变换),由此引入齐次坐标,使得平移变换可以用一个矩阵表示

齐次坐标中若写1则表示该向量表示点,若写0则表示该向量表示向量
Transformation_第19张图片
Transformation_第20张图片
齐次坐标下点+点=两点间中点

Affine Transformation(仿射变换)
Transformation_第21张图片
齐次坐标下的二维变换的各种变换矩阵

Transformation_第22张图片

4. 3D Transformations

类比 2D Transformation
Transformation_第23张图片
变换顺序:先应用线性变换后平移
Transformation_第24张图片

4.1 Scaling,Translation

缩放变换与平移变换
Transformation_第25张图片

4.1 Rotation

4.1.1 Fixed axes

绕固定轴旋转
xyzxyz
x叉乘y得到z,则 R x 、 R y 、 R z R_x、R_y、R_z RxRyRz内四个三角函数位置都一样
xyzxyz
x叉乘z得到-y, R y R_y Ry R x 、 R z R_x、R_z RxRz内四个三角函数位置不一样
Transformation_第26张图片

4.1.2 Euler

绕任意轴的旋转可以分解为绕三轴的旋转
Transformation_第27张图片

4.1.3 Rodrigues

本人博客:罗德里格斯公式推导
Transformation_第28张图片
若轴 n n n不经过原点,我们可以先将其移动到原点,经过旋转操作后,再将其移动到初始位置

Transformation_第29张图片
N是叉乘的矩阵形式为反对称矩阵
a ⃗ = ( a 1 , b 1 , c 1 ) T \vec{a}=(a_1,b_1,c_1)^T a =(a1b1c1)T b ⃗ = ( a 2 , b 2 , c 2 ) T \vec{b}=(a_2,b_2,c_2)^T b =(a2b2c2)T
c ⃗ = a ⃗ × b ⃗   = ∣ i j k a 1 b 1 c 1 a 2 b 2 c 2 ∣   = ( a 2 b 3 − a 3 b 2 − ( a 1 b 3 − a 3 b 1 ) a 1 b 2 − a 2 b 1 )   = ( 0 − a 3 a 2 a 3 0 − a 1 − a 2 a 1 0 ) ( b 1 b 2 b 3 ) \vec{c}=\vec{a}×\vec{b}\\ ~\\ =\left | \begin{matrix} i & j & k \\ a_1 & b_1 & c_1 \\ a_2 & b_2 & c_2 \\ \end{matrix} \right | \\ ~\\ =\begin{pmatrix} a_2b_3-a_3b_2\\ -(a_1b_3-a_3b_1)\\ a_1b_2-a_2b_1 \end{pmatrix}\\ ~\\ =\begin{pmatrix} 0 & -a_3 & a_2\\ a_3 & 0 & -a_1\\ -a_2 & a_1 & 0 \end{pmatrix} \begin{pmatrix} b_1\\ b_2\\ b_3 \end{pmatrix} c =a ×b  = ia1a2jb1b2kc1c2  = a2b3a3b2(a1b3a3b1)a1b2a2b1  = 0a3a2a30a1a2a10 b1b2b3

4.1.4 Quaternion

四元数的引入更多是为了旋转与旋转之间的插值
本人博客:四元数公式推导
Transformation_第30张图片

5. Viewing transformation(观测变换)

5.1 View(视图)/Camera transformation

Transformation_第31张图片

Model transformation、View transformation、Projection transformation 简称MVP变换
Transformation_第32张图片
相机位置、相机镜头朝向、相机镜头垂直方向(如果相机旋转则拍出照片不一样,所以需要用此方向标识)
Transformation_第33张图片

相机和所拍摄物体如果同时做相同变换,则拍摄的照片相同,所以将相机固定在原点
Transformation_第34张图片
利用view变换矩阵将相机变换到原点,使其三轴方向与坐标系吻合
Transformation_第35张图片
Transformation_第36张图片
先平移后旋转,但这个由这个etg三轴旋转到xy-z不好求,但我们可以反过来思考,由xy-z旋转到etg的方向,然后求逆得到etg旋转到xy-z方向的旋转矩阵(正交矩阵的逆为其转置)
Transformation_第37张图片

5.2 Projection(投影)transformation

正交投影并没有近大远小特点,而透视投影有此特点
Transformation_第38张图片
透视投影中相机离物体近,正交投影中相机离物体无限远
Transformation_第39张图片

5.2.1 Orthographic(正交) projection

Transformation_第40张图片


Transformation_第41张图片
物体在长方体(空间)内,将物体(包含其内的物体)平移到原点(物体中心与原点重合),缩放长方体(包含其内的物体)各边为2(由于标准的cube边范围为[-1,1]),经过变换后长方体内的物体,然后进行正交投影(从z轴看向负方向),此时的投影是被拉伸过的,把投影再作视口变换(缩放到屏幕宽高),最终得到正确的投影
为什么要把物体放到cube中?因为只有缩放到[-1,1]范围内,屏幕上物体才能显示完全
下图中x=l(left plane)、x=r(right plane)、y=b(bottom plane)、y=t(top plane)、z=n(near plane)、z=f(far plane)
Transformation_第42张图片

5.2.2 Perspective(透视)projection

透视投影近大远小,平行线不再平行,收敛到同一个点
Transformation_第43张图片
Transformation_第44张图片
Transformation_第45张图片
定义视锥Frustum需要可视角度、宽高比
视场角FOV:你所能看到的视野范围,此范围用宽高定义
Transformation_第46张图片
下图来自:视锥体剔除(Frustum Culling)算法详解
Transformation_第47张图片
给定FOV和宽高比就能得到l,r,b,t(各个平面的部分坐标值)
x=l(left plane)、x=r(right plane)、y=b(bottom plane)、y=t(top plane)、z=n(near plane)、z=f(far plane)
Transformation_第48张图片
类比正交投影,我们也定义near plane 和 far plane
透视投影过程:将视锥Frustum挤压为Cuboid,随后进行正交投影
物体在视锥Frustum内部,挤压Frustum的同时,物体也被挤压
Transformation_第49张图片
物体在视锥Frustum内部,挤压Frustum的同时,物体也被挤压,挤压过程中near plane上的所有点不变,far plane的中心点位置不变,z坐标不变,y坐标变,而在n与f plane之间的点(x,y,z)坐标均变化,也就是物体上的点坐标均变化
Transformation_第50张图片

Transformation_第51张图片
Transformation_第52张图片
在挤压过程中near plane上所有点坐标均不变,far plane上z坐标不变
(1)我们先来看看从near plane上所有点坐标均不变这条信息能够让我们得知有关M矩阵的哪些信息?
near平面上点的坐标齐次形式 ( x , y , n , 1 ) T (x,y,n,1)^T (x,y,n,1)T挤压过程中不变仍为 ( x , y , n , 1 ) T (x,y,n,1)^T (x,y,n,1)T,齐次坐标乘n后 ( n x , n y , n 2 , n ) T (nx,ny,n^2,n)^T (nx,ny,n2,n)T仍表示三维空间点 ( x , y , z ) (x,y,z) (x,y,z)
M persp->ortho ⋅ ( n x , n y , n 2 , n ) T = ( n x , n y , n 2 , n ) T M_{\text{persp->ortho}}\cdot (nx,ny,n^2,n)^T=(nx,ny,n^2,n)^T Mpersp->ortho(nx,ny,n2,n)T=(nx,ny,n2,n)T(矩阵第三行与坐标相乘结果为 n 2 n^2 n2
M persp->ortho M_{\text{persp->ortho}} Mpersp->ortho的第三行形式为 ( 0 , 0 , a , b ) (0,0,a,b) (0,0,a,b)
( 0 , 0 , a , b ) ⋅ ( x , y , n , 1 ) T = n 2 (0,0,a,b)\cdot (x,y,n,1)^T=n^2 (0,0,a,b)(x,y,n,1)T=n2
得到式子: a n + b = n 2 an+b=n^2 an+b=n2

(2)接下来我们看看far plane上z坐标不变这条信息能够让我们得知关于M矩阵的哪些信息?
far平面z坐标的值为 f f f,far 平面上中心点的坐标齐次形式 ( 0 , 0 , f , 1 ) T (0,0,f,1)^T (0,0,f,1)T将其乘f得到 ( 0 , 0 , f 2 , f ) T (0,0,f^2,f)^T (0,0,f2,f)T
M persp->ortho ⋅ ( 0 , 0 , f 2 , f ) T = ( 0 , 0 , f 2 , f ) T M_{\text{persp->ortho}}\cdot (0,0,f^2,f)^T=(0,0,f^2,f)^T Mpersp->ortho(0,0,f2,f)T=(0,0,f2,f)T(矩阵第三行与坐标相乘结果为 f 2 f^2 f2
M persp->ortho M_{\text{persp->ortho}} Mpersp->ortho的第三行形式为 ( 0 , 0 , a , b ) (0,0,a,b) (0,0,a,b)
( 0 , 0 , a , b ) ⋅ ( 0 , 0 , f 2 , f ) T = f 2 (0,0,a,b)\cdot (0,0,f^2,f)^T=f^2 (0,0,a,b)(0,0,f2,f)T=f2
得到式子: a f + b = f 2 af+b=f^2 af+b=f2
{ a n + b = n 2 a f + b = f 2   a = n + f 、 b = − n f \begin{cases} an+b=n^2\\ af+b=f^2 \end{cases}\\ ~\\ a=n+f、b=-nf {an+b=n2af+b=f2 a=n+fb=nf
最终
M persp->ortho = ( n 0 0 0 0 n 0 0 0 0 n + f − n f 0 0 0 1 ) M_{\text{persp->ortho}}=\left( \begin{array} {cccc} n&0&0&0\\ 0&n&0&0\\ 0&0&n+f&-nf\\ 0 & 0& 0&1 \end{array} \right) Mpersp->ortho= n0000n0000n+f000nf1
挤压完成后,下一步进行正交投影 M ortho M_{\text{ortho}} Mortho
Transformation_第53张图片
Transformation_第54张图片

透视投影矩阵
M perp = M ortho M persp->ortho   = ( 2 r − l 0 0 − r + l r − l 0 2 t − b 0 − t + b t − b 0 0 2 n − f − n + f n − f 0 0 0 1 ) ( n 0 0 0 0 n 0 0 0 0 n + f − n f 0 0 0 1 )   M perp = ( 2 n r − l 0 l + r l − r 0 0 2 n t − b b + t b − t 0 0 0 n + f n − f 2 f n f − n 0 0 1 0 ) M_{\text{perp}}=M_{\text{ortho}}M_{\text{persp->ortho}}\\ ~\\ =\left( \begin{array} {cccc} \frac{2}{r-l}&0&0&-\frac{r+l}{r-l}\\ 0&\frac{2}{t-b}&0&-\frac{t+b}{t-b}\\ 0&0&\frac{2}{n-f}&-\frac{n+f}{n-f}\\ 0 & 0& 0&1 \end{array} \right) \left( \begin{array} {cccc} n&0&0&0\\ 0&n&0&0\\ 0&0&n+f&-nf\\ 0 & 0& 0&1 \end{array} \right)\\ ~\\ M_{\text{perp}}=\left( \begin{array} {cccc} \frac{2n}{r-l}&0&\frac{l+r}{l-r}&0\\ 0&\frac{2n}{t-b}&\frac{b+t}{b-t}&0\\ 0&0&\frac{n+f}{n-f}&\frac{2fn}{f-n}\\ 0 & 0& 1&0 \end{array} \right) Mperp=MorthoMpersp->ortho = rl20000tb20000nf20rlr+ltbt+bnfn+f1 n0000n0000n+f000nf1  Mperp= rl2n0000tb2n00lrl+rbtb+tnfn+f100fn2fn0
视口变换矩阵
M viewport = ( width 2 0 0 width 2 0 height 2 0 height 2 0 0 1 0 0 0 0 1 ) M_{\text{viewport}}=\left( \begin{array} {cccc} \frac{\text{width}}{2}&0&0&\frac{\text{width}}{2}\\ 0&\frac{\text{height}}{2}&0&\frac{\text{height}}{2}\\ 0&0&1&0\\ 0 & 0& 0&1 \end{array} \right) Mviewport= 2width00002height0000102width2height01
综上:将空间中任意物体在屏幕上显示的变换矩阵M(MVP变换)
M = M view M perp M cam M model M=M_{\text{view}}M_{\text{perp}}M_{\text{cam}}M_{\text{model}} M=MviewMperpMcamMmodel
M model M_{\text{model}} Mmodel将3D物体移动到某个位置(modeling transformation)
M cam M_{\text{cam}} Mcam相机选择合适角度(Camera transformation)
M perp M_{\text{perp}} Mperp视锥Frustum中的物体 变换为 标准立方体canonical cube中的物体(Projection transformation中的Perspective transformation)
M view M_{\text{view}} Mview视口变换主是将视景体内投影的物体显示到二维的视口平面上(Viewport transformation)
Transformation_第55张图片

Transformation_第56张图片

你可能感兴趣的:(计算机图形学基础,计算机图形学,transformation)