计算机图形学二:变换
1.模型变换
2.视图变换
理解变换表达成矩阵:
1.左边一张图,图上任一点都可以表达成[x,y]的两行一列矩阵
2.左边的图经过变换得到右边的图,图中任一点都是经过了同样的变换过程,也就是x'和x,y'和y有一个确定的关系
3.这个关系就可以表达成一个矩阵,叫做变换矩阵,这个矩阵乘上原始的点[x,y]就能得到变换后的[x',y']
上面两张图是缩放变换:可以写成一个点矩阵乘上一个变换矩阵,这个[s00s]也叫做缩放矩阵
仍然可以写成矩阵相乘,只不过s有两个值
翻转矩阵
剪切变换:y没变,x增加了y*a,可以表达成矩阵
切变矩阵
旋转矩阵
这种变换叫做线性变换
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,然后旋转,最后再平移回去,这样就可以全部对应几种仿射变换
三维的情况是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变换:
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.再取一个特殊点,即远平面的中心点,它就在z轴上,假设z值是f,因此得到这个点是(0,0,f),这个点的这个点变换之后也不会发生变化,再根据第四步,得到同样的等式