计算机图形学二:变换

一.仿射变换

变换

1.模型变换
2.视图变换

缩放

写成矩阵

理解变换表达成矩阵:
1.左边一张图,图上任一点都可以表达成[x,y]的两行一列矩阵
2.左边的图经过变换得到右边的图,图中任一点都是经过了同样的变换过程,也就是x'和x,y'和y有一个确定的关系
3.这个关系就可以表达成一个矩阵,叫做变换矩阵,这个矩阵乘上原始的点[x,y]就能得到变换后的[x',y']
上面两张图是缩放变换:可以写成一个点矩阵乘上一个变换矩阵,这个[s00s]也叫做缩放矩阵

不均匀的缩放

仍然可以写成矩阵相乘,只不过s有两个值

翻转的矩阵表达

翻转矩阵

剪切变换

剪切变换:y没变,x增加了y*a,可以表达成矩阵
切变矩阵

旋转变换

旋转矩阵

旋转矩阵推导

1.根据上面的几种变换,变换后的矩阵的能与变换矩阵乘上原来的矩阵,也就是要推导中间的矩阵,求ABCD
2.找一个特殊的点(1.0),再根据图中,旋转之后,(1,0)变成了(1cosα,1sinα),也就是(cosα,,sinα),于是就有了最下面的矩阵等式
3.然后根据矩阵乘法得到右边的等式,得到A是cosα,C是sinα
4.同理根据(0,1)得到B和D是-sinα和cosα.

变换的通用表达式

这种变换叫做线性变换

平移变换

增加一项

1.平移变换无法写成上面线性变换的形式
2.因此通过再增加一项[tx,ty],就可以表达平移

二.齐次坐标

齐次坐标

1.引入了一个新的值,当表示二维点时,增加一个1,当表示二维向量时,增加一个0.
2.增加了一个1之后,变换矩阵表达如上面所示,可以表达出平移的变化了
3.之所以表达向量用0,是因为这样的话,变换之后的矩阵不会变,这对应了向量平移方向不变的特性

齐次坐标的作用

1.向量+向量=向量,(x1,y,1,0)+(x2,y2,0)
2.点-点 = 向量,坐标中从一个点指向另一个点的向量(x1,y,1,1)-(x2,y2,1)
3.点+向量(x1,y,1,1)-(x2,y2,0),点沿着向量移动
4.点加点得到两点之间的中点,上图最下面的表达式,把表达点的1换成w,(x,y,1)换成(x/w,y/w,1),这样的话(1,1,1,)+(3,3,1)=(2,2,1)

仿射变换

缩放,旋转和平移

1.综合线性变换和平移变换,可以叫做仿射变换
2.放射变换引入齐次坐标就可以把各种情况都写成两个矩阵的乘

变换的顺序是非常重要的

1.图中上下都是变换2次.但是顺序不同,结果也不同,变换用矩阵表达就是乘上一个矩阵,不同的结果正好符合了矩阵乘法不遵循交换律这一点

变换的过程

结合

1.变换时,矩阵的应用是从右到左的,图中,最左边是原来的点,等式左边表示的是两次变换的结果,但是其实步骤是先右后左,是先旋转,再平移,等式右边先从右边开始算
2.不过矩阵乘法遵守结合律,因此是可以先把左边所有的操作全部先算好,得到一个矩阵,无论变换的过程多复杂.这个矩阵都能表达,最后拿原来的点去乘上这个矩阵,也可以得到最终结果

平移的分解

1.图中的问题是以点(c,c)为原点旋转,直接旋转行不通的
2.这里先平移变换,x和y都减去c,然后旋转,最后再平移回去,这样就可以全部对应几种仿射变换

3D的仿射变换表达

三维的情况是4x4的矩阵:
1.同样最右边的tx,ty,tz表示平移,左边的a到i表示线性变换
2.齐次坐标表达式是先应用线性变换,再平移

旋转的逆

描述了旋转θ和-θ的旋转矩阵:
1.旋转矩阵的逆等于旋转矩阵的转置

三.三维变换

三维变换

1.统称viewing transformation
2.分为视图和投影两种
3.投影有两种不同的投影,正交和透视

三维的缩放和平移

三维的缩放和平移与二维完全一致,只是多一个行列

三维的旋转

三维的旋转比较复杂,这里是三种特殊情况:
1.分别是绕三个轴旋转,
2.围绕x轴旋转时,x是不变的,因此第一行和第一列都是(1,0,0);后面的(cosα,sinα,cosα,-sinα)对应了y和z轴上的变化
3.绕z轴旋转与绕x轴旋转类似
4.但是绕y轴旋转的矩阵中,左下角是-sinα,右上角是+sinα,与x和z矩阵相反,这是因为向量X 叉乘 向量Z只能得到反向的Y,必须是向量Z 叉乘 向量X才能得到向量Y,这里回忆一下向量叉乘

三维旋转的一般情况

1.roll,调头旋转
2.yaw,倾斜旋转
3.pitch,仰角旋转
4.二维的旋转,是绕某一点为圆心的旋转,在三维中,则是绕一条线为轴进行旋转,计算时,二维以坐标轴原点为圆心,三维下则轴过原点,如果不过原点.就做分解,先平移再旋转,最后再平移回去

MVP变换

模型视图投影变换,MVP变换:
1.场景模型
2.角度视图
3.获得投影

相机在原点

如何理解:
1.当要把三维的场景变成一张二维的图片的时候,可以理解为相机拍照,相机与三维场景之间存在于坐标系中,为了方便研究,将整个系统连带相机与三维场景整个进行变换,变换的结果是相机处在原点,相机与三维场景是相对静止的,当相机变了,三维场景自然也就变了,并且整个系统都满足一个变换矩阵,得到相机那个点的变换,就可以应用到整个系统中.
2.把相机定义在原点,向上是Y,往-Z的方向拍摄(这里X叉乘Y是Z,-Z没有问题)

平移和旋转相机

1.让相机处在原点.并且相机的三个轴(这三个轴确定了相机的拍摄角度,也就是mvp中的v)旋转到与X,Y,Z轴重合,于是整个系统被平移和旋转.

相机的变换矩阵

1.先做平移(右边的矩阵)再做线性变换
2.如写相机的旋转:这里采用的是逆变换(左下角矩阵),也就是把原点变换到相机所在位置的变换矩阵,然后根据旋转矩阵的转置就等于其逆变换的原理,就得到了相机的变换矩阵(右下角矩阵)

两种投影

1.正交投影和透视投影
2.透视投影有透视效果,力立方体的边会交于一点,正交投影没有透视效果,立方体的边是完全平行的
3.投影的延伸汇集于一点形成锥形,称为视椎

正交投影

正交投影:
1.定义一个矩阵
2.平移到原点,因为是移到(0,0,0)所以平移矩阵的第三列是负的
3.缩放到[-1,1],-1到1长度是2,所以缩放倍率是2/边长

推导透视投影

一个前提

1.前面说到,表示一个点可以写成(x,y,z,1),在统一模型时,写成(x/w,y/w,z/w,w),事实上写成(xz,yz,z*z,z)也没有问题,表示的是同一个点,也就是说图中的(1,0,0,1)和(2,0,0,2)两个都是指点(1,0,0)

分解透视投影

1.将左图中的远平面缩放成和近平面一样,然后做一次正交投影,合起来就是透视投影了
2.这其中:左边是相机,近平面的四个点不会变化,因此远平面到相机的距离,也就是的z值不会变,远平面的中心点不会变化
3.注意这不是变换某个点,也不是变换某个面,是这个立体都在变换,变换之后就成一个长方体了,也就是说这个立体上的任何一点都满足变换公式,现在就要推导出这个公式

第一步

1.左边是相机原点,Y是上,朝-Z方向看,把图像的中心轴放在z轴上,这样呈现出一个图像最终汇集在原点上的效果
2.不难得出一个相似三角形关系,得到y'=(n/z)y,z不变,x同样也满足x'=(n/z)x

第二步

1.通过第一步的分析,得到挤压后的点((n/z)x,(n/z)y,unknown,1),再根据前面点的表示那张图,进行变换,得到(nx,ny,unknown,z)

第三步

1.现在我们知道了一个4x4的矩阵,描述了一种变换,乘上点(x,y,z,1)之后,得到变换后的点(nx,ny,unknown,z),根据这个我们可以推出这个4x4矩阵大致如上图的最下面所示

第四步

1.现在我们知道了如何统一的描述这种变换,也就是左上角,一个4x4矩阵乘上原来的点,得到一个变换后的点
2.那么,我们在这个透视投影的立体上取一个特殊点 ---- 近平面上的一个点,对于这个点,它变换之后仍然是自己,因为前面说到近平面的点不会变
3.根据前面的图得到近平面的z值就是n,于是我们把这个近平面的点换一种写法,换成(nx,ny,nn,n),都乘上n,表示的仍然是这个点
4.然后再去套用第三步得到的公式,我们就得到第三行与原来的点(x,y,n,1)的乘积是n
n,那么这个4x4矩阵的第三行必然是(0,0,A,B),前两项必然是0

第五步

1.再取一个特殊点,即远平面的中心点,它就在z轴上,假设z值是f,因此得到这个点是(0,0,f),这个点的这个点变换之后也不会发生变化,再根据第四步,得到同样的等式

第六步

1.根据第四步和第五步得到两个等式,An+B = nn,Af+B = ff,最终得到结果A=n+f,B=-nf
2.到此为止透视投影转化为长方体结束了,得到了挤压的变换矩阵,最后想要做完透视投影,还要再进行一步正交投影,所以还要再乘上正交投影的变换矩阵

你可能感兴趣的:(计算机图形学二:变换)