计算机图形学笔记一:基础变换

基础变换

  • 1.变换的作用
  • 2.二维变换
    • 2.1缩放变换(Scale Transform)
      • 2.1.1等比例缩放
      • 2.1.2不等比例缩放
    • 2.2对称变换(Reflection Transform)
    • 2.3错切变换(Shear Transform)
    • 2.4旋转变换(Rotation Transform)
  • 3.三维变换
    • 3.1缩放变换(Scale Transform)
    • 3.2平移变换(Translation Transform)
    • 3.3旋转变换(Scale Transform)
      • 3.3.1绕坐标轴旋转
      • 3.3.2绕任意轴旋转
  • 4.仿射变换
    • 4.1齐次坐标(Homogeneous Coordinates)
    • 4.2平移变换(Translation Transform)
    • 4.3复合变换(Inverse Transform)

1.变换的作用

对于计算机图形学从业者,掌握变换(transform)是极其重要的。掌握了transform,你就可以摆放物体(objects)、灯光(lights)和相机(cameras)的位置,变换(reshape)它们的形状,并使(animate)它们动起来。懂了transform,你就可以确保所有的计算是在同一个坐标系(the same coordinate system)中进行,而不是错误地使用坐标系。你还可以以不同的方式,把物体(objects)投影到平面上。说的这些只是transfrom的小部分作用,但足以说明transfrom在实时图形学(real-time graphics),乃至所有图形学(any kind of computer graphics)中扮演的重要角色。

2.二维变换

2.1缩放变换(Scale Transform)

2.1.1等比例缩放

计算机图形学笔记一:基础变换_第1张图片
一般表示:
x ′ = s x x'=sx x=sx
y ′ = s y y'=sy y=sy
矩阵表示:
( x ′ y ′ ) \begin{pmatrix} x'\\ y'\\ \end{pmatrix} (xy)= ( s 0 0 s ) \begin{pmatrix} s&0\\ 0&s\\ \end{pmatrix} (s00s) ( x y ) \begin{pmatrix} x\\ y\\ \end{pmatrix} (xy)
仿射变换表示:
S ( S x , S y ) S(S_x,S_y) S(Sx,Sy)= ( S 0 0 0 S 0 0 0 1 ) \begin{pmatrix} S&0&0\\ 0&S&0\\ 0&0&1 \end{pmatrix} S000S0001 ( x y ) \begin{pmatrix} x\\ y\\ \end{pmatrix} (xy)

2.1.2不等比例缩放

计算机图形学笔记一:基础变换_第2张图片

一般表示:
x ′ = s x x'=s_x x=sx
y ′ = y y'=y y=y
矩阵表示:
( x ′ y ′ ) \begin{pmatrix} x'\\ y'\\ \end{pmatrix} (xy)= ( S x 0 0 S y ) \begin{pmatrix} S_x&0\\ 0&S_y\\ \end{pmatrix} (Sx00Sy) ( x y ) \begin{pmatrix} x\\ y\\ \end{pmatrix} (xy)
仿射变换表示:
S ( S x , S y ) S(S_x,S_y) S(Sx,Sy)= ( S x 0 0 0 S y 0 0 0 1 ) \begin{pmatrix} S_x&0&0\\ 0&S_y&0\\ 0&0&1 \end{pmatrix} Sx000Sy0001 ( x y ) \begin{pmatrix} x\\ y\\ \end{pmatrix} (xy)

2.2对称变换(Reflection Transform)

计算机图形学笔记一:基础变换_第3张图片
一般表示:
x ′ = − x x'=-x x=x
y ′ = y y'=y y=y
矩阵表示
( x ′ y ′ ) \begin{pmatrix} x'\\ y'\\ \end{pmatrix} (xy)= ( − 1 0 0 1 ) \begin{pmatrix} -1&0\\ 0&1\\ \end{pmatrix} (1001) ( x y ) \begin{pmatrix} x\\ y\\ \end{pmatrix} (xy)

2.3错切变换(Shear Transform)

错切变换可以用于在游戏中扭曲整个场景,创建一种迷幻效果,或者也可用于扭曲模型的外观。有六个基本的错切变换矩阵
计算机图形学笔记一:基础变换_第4张图片
矩阵表示:
( x ′ y ′ ) \begin{pmatrix} x'\\ y'\\ \end{pmatrix} (xy)= ( S x 0 0 S y ) \begin{pmatrix} S_x&0\\ 0&S_y\\ \end{pmatrix} (Sx00Sy) ( x y ) \begin{pmatrix} x\\ y\\ \end{pmatrix} (xy)

2.4旋转变换(Rotation Transform)

计算机图形学笔记一:基础变换_第5张图片
矩阵表示:
R θ R_\theta Rθ= ( c o s θ − s i n θ s i n θ c o s θ ) \begin{pmatrix} cos\theta&-sin\theta\\ sin\theta&cos\theta\\ \end{pmatrix} (cosθsinθsinθcosθ)
仿射变换表示:
R θ R_\theta Rθ= ( c o s θ − s i n θ 0 s i n θ c o s θ 0 0 0 1 ) \begin{pmatrix} cos\theta&-sin\theta&0\\ sin\theta&cos\theta&0\\ 0&0&1 \end{pmatrix} cosθsinθ0sinθcosθ0001

3.三维变换

三维变换类似二维变换,只是在二维的基础上又增加了一个z坐标,因此以下变换均直接使用仿射变换。

3.1缩放变换(Scale Transform)

仿射变换表示:
计算机图形学笔记一:基础变换_第6张图片

3.2平移变换(Translation Transform)

仿射变换表示:
计算机图形学笔记一:基础变换_第7张图片

3.3旋转变换(Scale Transform)

3.3.1绕坐标轴旋转

3维旋转有3个矩阵,分别对应绕x轴,y轴,z轴旋转。采用右手坐标系,旋转方向为绕z轴旋转(x轴转向y轴),不难推出绕x轴旋转(y转向z),绕y轴旋转(z转向x),(右手螺旋定则)
x → y → z → x x→y→z→x xyzx
计算机图形学笔记一:基础变换_第8张图片
绕x轴旋转:(x不变,y转向z)
计算机图形学笔记一:基础变换_第9张图片
绕y轴旋转:(y不变,z转向x)

计算机图形学笔记一:基础变换_第10张图片
绕z轴旋转:(z不变,x转向y)
计算机图形学笔记一:基础变换_第11张图片
注:任意旋转都是正交矩阵
正交矩阵性质:正交矩阵的逆=正交矩阵的转置
因此:旋转矩阵的逆矩阵=旋转矩阵的转置
旋转矩阵的逆:几何解释是,我反着转这么多,比如我逆时针转45°,转置便是顺时针转45°

3.3.2绕任意轴旋转

大致思路:将给定的任意轴给先旋转到任意的x,y,z轴上,然后问题转化为基本的旋转,然后再逆旋转回来。
罗德里格斯旋转公式:(绕轴n旋转角度α)
计算机图形学笔记一:基础变换_第12张图片

4.仿射变换

仿射变换,又称仿射映射,是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间。

4.1齐次坐标(Homogeneous Coordinates)

用三维向量表示二维向量,或者一般而言,用一个n+1维的向量表示一个n维向量的方法称为齐次坐标表示法。
引入齐次坐标后,就可以用一个公式将缩放,旋转,平移变换用矩阵表示出来。
三维空间中:齐次坐标使用四个元素来表示,即(x, y, z, w),要将齐次坐标转换为三维坐标,其关系为(x/w, y/w, z/w),其中w表示坐标轴的远近参数,通常设为1,如果要用来表示远近感,则会设定为距离的倒数(1/距离),例如表示一个无限远的距离时,我们会将w 设定为0。

计算机图形学笔记一:基础变换_第13张图片
2D齐次坐标:
2Dpoint = ( x , y , 1 ) T (x,y,1)^T (x,y,1)T
2Dvector = ( x , y , 0 ) T (x,y,0)^T (x,y,0)T
齐次坐标系下:
( x y w ) \begin{pmatrix} x\\ y\\ w\\ \end{pmatrix} xyw= ( x / w y / w 1 ) \begin{pmatrix} x/w\\ y/w\\ 1\\ \end{pmatrix} x/wy/w1
当w坐标为1或0时,以下结论成立:

  • vector + vector = vector
  • point – point = vector
  • point + vector = point
  • point + point = ??

4.2平移变换(Translation Transform)

计算机图形学笔记一:基础变换_第14张图片
一般表示:
x ′ = x + t x x'=x+t_x x=x+tx
y ′ = y + t y y'=y+t_y y=y+ty
矩阵表示:
( x ′ y ′ ) \begin{pmatrix} x'\\ y'\\ \end{pmatrix} (xy)= ( a b c d ) \begin{pmatrix} a&b\\ c&d\\ \end{pmatrix} (acbd) ( x y ) \begin{pmatrix} x\\ y\\ \end{pmatrix} (xy)+ ( t x t y ) \begin{pmatrix} t_x\\ t_y\\ \end{pmatrix} (txty)
仿射变换表示:
T ( t x , t y ) T(t_x,t_y) T(tx,ty)= ( 1 0 t x 0 1 t y 0 0 1 ) \begin{pmatrix} 1&0&t_x\\ 0&1&t_y\\ 0&0&1 \end{pmatrix} 100010txty1 ( x y 1 ) \begin{pmatrix} x\\ y\\ 1\\ \end{pmatrix} xy1= ( x + t x y + t y 1 ) \begin{pmatrix} x+t_x\\ y+t_y\\ 1\\ \end{pmatrix} x+txy+ty1

4.3复合变换(Inverse Transform)

计算机图形学笔记一:基础变换_第15张图片
上面的是先平移后旋转;
下面的是先旋转后平移。(设以此变换为目的)
可以看出不同的先后变换所得到的最终图形位置不一样。(矩阵不满足结合律)
R 45 ⋅ T ( 1 , 0 ) ≠ T ( 1 , 0 ) ⋅ R 45 R_{45} · T_{(1,0)}≠T_{(1,0)} · R_{45} R45T(1,0)=T(1,0)R45
先旋转后平移计算:(从右往左计算)
T ( 1 , 0 ) ⋅ R 45 T_{(1,0)} · R_{45} T(1,0)R45 ( x y 1 ) \begin{pmatrix} x\\ y\\ 1 \end{pmatrix} xy1= ( 1 0 1 0 1 0 0 0 1 ) \begin{pmatrix} 1&0&1\\ 0&1&0\\ 0&0&1 \end{pmatrix} 100010101 ( c o s 4 5 o − s i n 4 5 o 0 s i n 4 5 o c o s 4 5 o 0 0 0 1 ) \begin{pmatrix} cos45^o &-sin45^o&0\\ sin45^o &cos45^o&0\\ 0&0&1\\ \end{pmatrix} cos45osin45o0sin45ocos45o0001 ( x y 1 ) \begin{pmatrix} x\\ y\\ 1 \end{pmatrix} xy1

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