三维几何的矩阵变换:

平移变换:

比例变换:

绕X轴旋转:

绕Y轴旋转:

绕Z轴旋转:

X轴反射变换:

Y轴反射变换:

Z轴反射变换:

关于xoy面的反射:

关于xoz面的反射:

关于yoz面的反射:

错切变换/剪切变换(shear transform)

沿X方向的错切:

沿Y方向的错切:

沿Z方向的错切:

三维复合变换:
T为复合变换矩阵吗,T1、T2 … Tn 为n个单次基本几何变换的变换矩阵

相对于任一参考点的三维几何变换
在三维基本几何变换中,比例变换和旋转变换是与参考点相关的。相对于任一参考点Q(x, y, z) 的比例变换和旋转变换应表达为复合变换形式。变换方法是首先将参考点平移到坐标原点,相对于坐标原点作比例变换或旋转变换,然后再进行反平移将参考点平移回原来的位置。
相对于任意方向的三维几何变换
相对于任一方向的变换方法是首先对任意方向做旋转变换,使变换方向与某个坐标轴重合,然后对该坐标轴进行三维基本几何变换,最后最反向旋转变换,将任意方向还原到原来的方向。三维几何变换中需要进行两次旋转变换,才能使任意方向与某个坐标轴重合。一般做法是先将任意方向旋转到某个坐标平面内,然后再旋转到与该坐标平面内的某个坐标轴重合。
坐标系变换
在进行三维观察时,需要将物体的描述从世界坐标系变换到观察坐标系,然后通过旋转视点可以观察物体的全貌。
同一种变换既可以看做是点变换也可以看做是坐标系变换。点变换是顶点位置发生改变,但坐标系位置不发生改变。坐标系变换是建立新坐标系描述旧坐标系内的顶点,坐标系位置发生改变,但顶点位置不发生改变。
二维平移变换矩阵

坐标系的旋转变换,应使用相反方向的旋转变换矩阵。如绕Z轴的逆时针变换,应使用顺时针旋转变换矩阵,反之亦然。

三维坐标系变换
平移变换矩阵

相对于点变换而言,坐标系变换的平移参数需要取为负值。
同二维坐标系的旋转变换类似,三维坐标系的旋转变换矩阵应使用点变换的反向旋转变换矩阵表示。
绕X轴的逆时针三维旋转变换矩阵为:

绕Y轴逆时针三维旋转变换矩阵为:

绕Z轴的逆时针三维旋转变换矩阵为:

β 为顺时针旋转角
坐标系的三维反射变换,直接采用点变换的反射变换矩阵。
投影变换分类

平行投影
由于显示器只能用二维图像表示三维物体,因此三维土体就要靠投影来降低维数得到二维平面图形,因此把三维坐标转变为二维坐标的过程称为投影变换。
根据投影中心与投影面之间的距离不同,投影可分为平行投影和透视投影。投影中心到投影面的距离为无限大时得到的投影称为平行投影,而对于透视投影,这个距离是有限的。平行投影又可分为斜投影和正交都应。投影方向不垂直与投影面的平行投影称为斜投影,投影方向垂直于投影面的平行投影称为正交投影。正交投影的最大特点是无论物体距离视点(眼睛或相机)多远,投影后的物体尺寸保持不变,常用于绘制物体的三视图。
正交投影变换

正交投影为

三视图
一个物体有6个视图:从物体的前面向后面投射所得的视图称主视图,从物体的上面向下面投射所得的视图称俯视图,从物体的左面向右面投射所得的视图称侧视图,还有其它三个视图不是很常用。
主视图

俯视图:

侧视图:

斜投影
将三维物体向投影面内作平行投影,但投影方向不垂直于投影面得到的投影称为斜投影。与正交投影相比,斜投影具有较好的立体感。斜投影也具有部分类似正交投影的可测量性,平行于投影面的物体表面的长度和角度投影后保持不变。


取b = 45度,当cota = 1 时,即投影方向与投影面成 45 度夹角时,得到的斜投影图为斜等测图。这时,垂直于投影面的任何直线段的投影长度保持不变。此时有:

取b = 45 度,当cota = 1/2 时,有a 约等于63.4度,得到的斜投影图为斜二测图,这时垂直于投影面的任何直线的投影长度为原来的一般。此时有:

透视投影
与平行投影相比,透视投影的特点是所有投影线都从空间一点(称为视点或投影中心)投射,离视点近的物体投影大,离视点元的物体投影小,小到极点消失,称为灭点(vanishing point)。一般将屏幕放下观察者与物体之间。投影线与屏幕的交点就是物体上一点的透视投影。视点代表人眼或相机、摄像机的位置,是观察坐标系的原点。视心是屏幕坐标系的原点。
透视变换坐标系
透视投影变换中,物体中西位于世界坐标系OwXwYwZw的原点Ow,视点位于观察坐标系OvXvYvZv的原点Ov(a, b, c),投影中心位于屏幕坐标系OsXsYsZs的原点Os。

世界坐标系
世界坐标系OwXwYwZw,采用右手直角坐标系。视点的直角坐标为Ov(a, b, c)。OwOv的长度为视径R,视点的球面坐标表示为Ov(R, θ, φ),其中θ 为OwM 与Z轴的夹角,φ为OwOv与Y轴的夹角。视点的球面坐标和直角坐标的关系为:

观察坐标系
OvXvYvZv为左手直角坐标系,坐标原点取在视点Ov上。Zv轴沿着视线方向OvOw指向Ow点,视线的正右方向为Xv轴,视线的正上方为Yv轴。
屏幕坐标
屏幕坐标OsXsYsZs也是左手直角坐标系,坐标原点Os位于视心。屏幕坐标系的Xs 和Ys 轴与观察坐标系的Xv轴和Yv轴方向一致,屏幕垂直于视线,Zs轴自然与Zv轴重合。
世界坐标系到观察坐标系的变换
首先将世界坐标系的原点Ow 平移到观察坐标系的原点Ov,然后将世界右手坐标系变换为观察左手坐标系,就可以视线从世界坐标系到观察坐标系的变换。
观察变换矩阵为:

展开式为:

为了避免程序中重复计算式中的三角函数耗费时间,三角函数可以使用常数代替
改变φ,视点就会沿着纬度方向旋转,改变θ,视点就会沿着经度方向旋转,增大视径R,则视点到物体的距离变远,物体的投影缩小;减小视径R,视点到物体的距离变近,物体的投影放大。观察坐标系只是提供了一种从任意视向观察物体的方法。
观察坐标到屏幕坐标系的变换
屏幕坐标系为左手系,且Zs轴与Zv同向。视点Ov 与视心Os的距离为视距离d。嘉定观察坐标系中物体上的一点为Pv(Xv, Yv, Zv),视线OvPv与屏幕的交点在观察坐标系中表示Ps(Xs, Ys, 0)代表物体上的Pv点在屏幕上的透视投影。

由点Pv想XvOvZv平面内作垂直教育N点,再由N点想Zv轴做垂线教育Q点。连接OvN交Xs轴于M点。
根据Rt△MOvOs 于Rt△MOvQ相似,有

根据Rt△PsOvM 于Rt△PvOvN相似,有

由此得到:

写成坐标形式:


于是可得:

透视变换矩阵为:

透视投影整体变换为:

透视投影分类
透视投影中,与屏幕平行的平行线投影后保持平行。不予屏幕平行的平行线投影后汇聚为灭点,灭点是无限远点再屏幕上的投影。每一组平行线都有其不同的灭点。坐标轴上灭点称为主灭点。
透视投影中主灭点数目是由屏幕切割坐标轴的数量来决定,并据此将透视投影分类为一点、两点、三点透视。一点透视有一个主灭点,即屏幕仅与一个坐标轴正交,与另外两个坐标轴平行,二点透视有两个主灭点,即屏幕仅与两个坐标轴相交,与另一个坐标轴平行。三点透视有三个主灭点,即屏幕与三个坐标轴都相交
计算透视投影的深度坐标
对于透视投影,场景中所有投影均位于以视点为顶点,连接视点与屏幕死角点为棱边的没有底面的四棱锥内。当屏幕离视点太近或太远时,物体因此变得太大或太小而不可识别。定义视域四棱锥的Z向近剪切面和远剪切面分别为Near 和 Far,经Zv 向裁剪后的视域四棱锥转化为四棱台。

物体在屏幕坐标系中的深度计算公式为:

其中Near 和Far是常数,且Near就是视距d。透视变换的一个重要性质是把直线映射为直线,平面映射为平面。

三维物体的动画主要使用三维几何变换来完成。透视投影是绘制真是感图形的基础,透视投影是在观察坐标系内实施的。物体的旋转通话可以使用两种方法生成,一种是物体不动,视点旋转,称为视图变换。另一张方法是物体旋转,视点不动,称为模型变换。真实感光照场景中,由于世界坐标系中设置了光源的位置,物体的旋转主要采用的是模型变换方式,此时视点和光源位置不变,物体旋转生成动画。
视点、屏幕和物体的位置关系有三种,屏幕位于物体和视点之间,物体位于屏幕和视点之间,视点位于屏幕和物体之间。视点位于屏幕和物体之间会使得图像倒置。
网友评论