图形学基础- Computer Graphcis&Tansformation 变换

目录

Computer Graphcis - Tansformation 变换

1.缩放变换

2.对称变换

3.切变

4.旋转变换

5.平移变换

5.1齐次坐标

6.组合变换

7.三维的变换矩阵

8.罗德里格斯公式:

Viewing transformation 观测变换

 1视图变换

1.1相机视图的定义

1.2 视图变换

2投影变换

2.1正交投影 

2.2透视投影


Computer Graphcis - Tansformation 变换

我们依次来看不同的变换

1.缩放变换

我们将这个图片缩放s倍的话,可以直接与对角矩阵相乘,这个对角矩阵是左上右下数据的

                                                           \begin{bmatrix} nx\\ ny \end{bmatrix} = \begin{bmatrix} s & 0\\ 0& s \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix}

如果是x  y  方向上的缩放比例不一致的话,只需要对应s改成对应的值就行了

                                                          \begin{bmatrix} nx\\ ny \end{bmatrix} = \begin{bmatrix} s_x & 0\\ 0& s_y \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix}

2.对称变换

做对称的操作

我们直接更改乘的矩阵就行

                                                        \begin{bmatrix} nx\\ ny \end{bmatrix} = \begin{bmatrix} -1 & 0\\ 0& 1 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix}

3.切变

切边就是拉扯的意思

 对于如图y没有改变而改变x的形式,我们只需要考虑x方向上的变化

                                                               \begin{bmatrix} nx\\ ny \end{bmatrix} = \begin{bmatrix} 1 & a\\ 0& 1 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix}

                                                                nx = x + ay   ny = y

4.旋转变换

旋转变换(Rotate)就是将图像旋转对应的操作

我们的目的是找到nx  和 ny  ,所以我们只要找到( x , y )和 ( nx , ny )之间的关系就ok了

原矩阵乘上旋转矩阵就完成变换,旋转矩阵如下:

                                                        R_\theta = \begin{bmatrix} cos\theta & -sin\theta \\ sin\theta & cos\theta \end{bmatrix}

同样是对角形式的,只是对角线是cos 两侧sin的符号不一样

线性变换:凡是我们变换后的坐标矩阵,可以表示成一下形式的,我们就叫做线性变换

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \begin{bmatrix} nx\\ ny \end{bmatrix} = \begin{bmatrix} a & b\\ c& d \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix}

                                                      nx = ax+by   ny = cx+dy 

接下来我们来看平移变换(Translation)

5.平移变换

平移就是要将原矩阵加上一个向量表示平移的方向,这种变换是仿射变换

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​                     \begin{bmatrix} nx\\ ny \end{bmatrix} = \begin{bmatrix} a & b\\ c& d \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} + \begin{bmatrix} t_x \\ t_y \end{bmatrix} 

如果只是平移但是没有缩放什么的,那么a b c d 矩阵就是单位矩阵

但是人是懒的,所以我们试图找到一个统一的方法,来描述变换,而不是再加上一个向量,所以我们引入一个齐次坐标的概念

5.1齐次坐标

我们使用一个新的样子来表示点和向量

比如2D的点和向量:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​  point = ( x , y , 1)^{T} \\ vector = ( x , y , 0)^{T}

我们对于二维的点和向量,多加一个维度,是点就加一个1,向量加一个0,

有什么好处呢?

这样在我们处理平移操作的时候,就不用再矩阵外再加上一个向量,同样只需要乘上一个新的矩阵看行了

         ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        \begin{bmatrix} nx\\ ny\\ nw \end{bmatrix} = \begin{bmatrix} 1 & 0 & t_x\\ 0& 1 & t_y \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} x \\ y \\ 1 \end{bmatrix} = \begin{bmatrix} x + t_x\\ y + t_y\\ 1 \end{bmatrix}

看的出来结果中的矩阵直接变成位移的形式了

为什么我们是1 , 向量是0呢?因为这样的可以保证原来的数据性质的不变性,,点减点之后是向量,点加一个点是中点,向量加向量还是向量

所以我们之前的旋转,缩放,平移的乘矩阵都可以直接加一个维度了

1.所以平移变换的矩阵公式:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​                   T(t_x , t_y) = \begin{bmatrix} a & b & t_x\\ c& d & t_y \\ 0 & 0 & 1 \end{bmatrix}

2.旋转矩阵:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​ R_\theta = \begin{bmatrix} cos\theta & -sin \theta & 0 \\ sin\theta & cos\theta & 0 \\ 0 & 0 &1 \end{bmatrix}

3.缩放矩阵:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​    S( s_x , s_y) = \begin{bmatrix} s_x &0 & 0 \\0 &s_y & 0 \\ 0 & 0 &1 \end{bmatrix}

  

6.组合变换

由于矩阵乘积的顺序影响最后矩阵的结果,所以当我们遇到平移旋转一起的时候,往往要考虑是先乘旋转矩阵还是平移矩阵

比如先旋转再平移的话,在我们乘积的时候要这样写:从右到左的一个一个的使用矩阵

当我们绕一个点旋转的时候,我们先平移,使得旋转点移到了原点,再使用旋转,最后平移回去

注意乘的顺序是右到左边的写

7.三维的变换矩阵

三维的矩阵与二维的是类似的,只是多加了一个维度

变换矩阵:

注意旋转,绕哪一个轴旋转,哪一个对应的矩阵就是1,其中y轴的是反的!

8.罗德里格斯公式:

关于旋转,我们引入欧拉角 , 对于任何一个角度的旋转,我们都可以直接将他分解成x y z方向上的旋转,那怎么将目标旋转变成我们的旋转矩阵呢?这要使用罗德里格斯公式:

R里面的n是过原点的向量,意思是所有的旋转绕的轴我们都可以把它看作过原点的,尔阿法是旋转的角度。



Viewing transformation 观测变换

 1视图变换

什么是视图变换:就是将三维的物体投影到相机上去,是在摆相机

1.1相机视图的定义

position 位置    look_at 朝向  和  UP_deriction 上方向

我们约定:相机位于原点,上方向是y , 看向z轴的负方向


1.2 视图变换

在视图变换的时候,为了把我们的相机变到约定位置(原点),我们需要对相机进行变换,需乘上一个矩阵M,我们先平移再旋转:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​M = R_vT_v

其中

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        T_v = \begin{bmatrix} 1 &0 &0 & -x_e\\ 0& 1 & 0& -y_e\\ 0& 0 & 1 & -z_e \\ 0 & 0& 0& 1 \end{bmatrix}

其中旋转是将朝向向量和上方向向量的叉乘e旋转到x轴上

需要乘的R矩阵很难计算,但是我们可以先求逆矩阵,就是将 x( 1, 0 , 0)旋转至 e 需要配乘的矩阵

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        R^{^{-1}}_v = \begin{bmatrix} x_e & x_t& x_-g& 0\\ y_e& y_t& y_-g &0 \\ z_e & z_t& z_-g& 0\\ 0 & 0 & 0 & 1 \end{bmatrix}

所以将e旋转至x轴的旋转矩阵就是转至后的矩阵:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        R_v = \begin{bmatrix} x_e & y_e& z_e& 0\\ x_t& y_t& z_t &0 \\ x_-g & y_-g& z_-g& 0\\ 0 & 0 & 0 & 1 \end{bmatrix}

所以 相机的视图变换矩阵M 就求出来了!其中在相机变换的时候,其他所有的物体都要进行这个变换,保证相对位置不变,这样相机就位于原点了!!!1


2投影变换

投影变换分为两个,正交投影透视投影

2.1正交投影 

如对一个3D区域进行正交投影? 

首先我们定义一个空间的立方体,这个立方体就是你要渲染的空间范围,前后上下左右什么的,然后拉着区域内的所有物体进行正交变换,先平移再缩放,映射成标准立方体[-1 , 1]

数学形式:

先平移,在缩放,缩放是从原来的长度 r-l 缩放至2单位长度,所以缩放因子是  \frac{2}{r- l},至于为什么是这个长度,我们行业内规定的要缩放至[-1 , 1]的范围

2.2透视投影

透视投影就是有近大远小

首先我们定义一个空间,这个空间是你要渲染的范围有近处n和远处f  ,这个空间不是一个标准的长方体,他是一个椎体,椎体的顶点就是相机的位置,相机位置我们规定是要放在原点的,所以其实椎体顶点就是原点,相机的画面就是你定义的近处n 的平面,

 我们要将区域内的物体投影到近处平面n,我们分两步:

1.将 f 平面压缩成近处平面n同样大小,但是前后距离不变(从透视区域变成正交区域)

2.做一次正交投影,就成功的将区域内的物体投影至n平面上了(进行正交变换)

完成第一步很简单,挤压后的x 和 y 应该是一下的样子    ​​​​​​​        ​​​​​​​    ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​                ​​​​​​​

点的齐次矩阵由原来的(x , y , z , 1) 变成了下图中间的样子,为了计算方便,我们给每一个数乘一个z变成右边的这个(因为齐次坐标的性质,点还是这个点没变的!)

关键来了!

那么,我们计算出了压缩之后的点的矩阵了,那我们是要到原来的点矩阵左边乘一个什么样的变换矩阵来将我们的点变成右边的这个点矩阵呢?我们来看看:

这个矩阵前两行很容易知道,但是我们要计算第三行:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        M_{persp->ortho} = \begin{bmatrix} n & 0&0 &0 \\ 0&n & 0&0 \\ 0& 0& ?&? \\ 0& 0 & 1 & 0 \end{bmatrix}

计算第三行很简单,我们带一个特殊点就行了,比如在n平面上的点不需要变换,齐次坐标是(x , y , n , 1),我们知道乘上M之后是(nx , ny ,n^2 , n),还有比如在f平面的中点不需要变换,齐次坐标是(0 , 0 , f , 1),我们知道乘上M之后是(0 , 0 ,f^2 , f) ,所以可以建立方程,解出M 的第三行,我们解得:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        M_{persp->ortho} = \begin{bmatrix} n & 0&0 &0 \\ 0&n & 0&0 \\ 0& 0& n+f&-nf \\ 0& 0 & 1 & 0 \end{bmatrix}

完成之后第一步完成,然后我们继续做正交投影,就完成了将投影区域进行了透视投影!!!!


所以最终我们的变换运用的顺序就是:

  1. Model Transformation(模型变换): 这个变换将物体从其局部坐标系(模型空间)转换到世界坐标系。每个模型可能有自己的模型矩阵,它通常包括旋转、缩放和平移操作。模型矩阵将确保每个模型在世界中的正确位置、朝向和大小。

  2. View Transformation(视图变换): 接下来,视图变换将整个场景从世界坐标系转换到视图坐标系(也称为眼坐标系)。这相当于将世界围绕观察者的眼睛进行旋转和平移,使得眼睛位于原点(0, 0, 0)并沿着负Z轴看。视图变换通常由一个表示相机位置、朝向和上方向的矩阵来完成。

  3. Projection Transformation(投影变换): 最后,投影变换将场景从视图坐标系转换到裁剪坐标系(也称为齐次裁剪坐标系)。这个变换负责将三维空间中的点投影到二维平面上,同时也处理深度信息。有两种主要类型的投影变换:正交投影和透视投影。透视投影是最常用的,因为它模拟了真实世界的视觉效果,即远处的物体会显得更小

以上就是Computer Graphcis 中 Tansformation的全部内容了,记录下学习的进度

  • 12
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值