学习笔记:计算机图形学中的几何变换初探续2

上一笔记中已经介绍了从摄像机坐标系到屏幕显示坐标系这一阶段中的后半段所使用的几何坐标变换。本篇中将介绍这一阶段前半段所使用的几何坐标变换。由于在上一笔记中最终选择使用四维坐标的模式,并且考虑到全部几何变换流程的一致性,在这一段同样也使用四维坐标的模式。

这一段几何坐标变换,实现的是从摄像机坐标系到视空间坐标系的变换。视空间坐标系的x、y、z轴方向与摄像机坐标系相同,而视空间坐标系x、y、z轴的范围均为-1到1。该几何变换前的摄像机坐标系本身是没有范围限制的,即可以涉及无限大的空间,而变换后的视空间大小是有限的,所以为了保证变换能够进行,必然需要对摄像机坐标系的范围进行限制。

从摄像机坐标系到视空间坐标系的常用变换方式有两种,分别是正交变换和透视变换。其中正交变换不考虑近大远小的特点,变换后各处物体的相对缩放是一致的。而透视变换则考虑近大远小的特点,变换后的不同物体,甚至是同一物体的不同顶点,其缩放程度都是不一样的。相对而言,透视变换应用更多一些。而正交变换一般用于工业设计和制造方面。下面分别对这两种变换进行介绍。

(1)正交变换

正交变换对于摄像机坐标系的范围限制是比较简单的。在x轴和y轴方向,选择一个与原点对称,且与相应坐标轴垂直的平面作为限制即可。在z轴方向,选择一个最小的z轴坐标和最大的z轴坐标,然后分别在这两个坐标位置处设定垂直于z轴的两个平面作为限制即可。这两个平面分别称为近平面和远平面。从合理的角度讲,远平面的z轴坐标要大于近平面的,近平面的要大于0。如此得到的六个平面所包围的空间,就得到了摄像机坐标系的限制范围。在此基础上进行变换时,对于x轴和y轴坐标,只需要考虑摄像机坐标系x轴和y轴方向的范围大小来进行缩放即可。对于z轴而言,需要同时进行平移和缩放变换,使得从近平面到远平面的坐标可以线性的变换到-1和1之间的坐标。在这一步中希望只使用一个变换矩阵即可,因而可以通过求解一个二元一次方程直接得到变换的系数。然后再简单的将变换矩阵第四行和第四列其他元素置零,仅保留第四行第四列位置处的元素为1,已使得变换前后的第四维坐标均为1.

(2)透视变换

透视变换对于摄像机坐标系的范围限制是比较复杂的。不过它在z轴方向的设置方式与正交变换相同。对于剩余的四个平面,不再与对应坐标轴垂直,只能保证与另一个坐标轴是平行的,即x方向的限制平面与y轴平行,y方向的限制平面与x轴平行。为了进行投影变换,需要选定视觉原点,这里选择摄像机位置为视觉原点。选择完视觉原点后,这四个剩余的平面还有一个特点是均经过视觉原点。此时,这四个平面的确定可以用视野范围来确定。对于限制x方向的两个平面,可以用从y轴看去的视野范围确定。对于限制y方向的两个平面,可以用从x轴看去的视野范围确定。按照惯例,一般给出仅使用后一个视野范围,前一个视野范围可以用限制范围的宽高比与后一个视野范围确定。如此一来,六个平面的位置均确定了,并得到了一个削顶的四棱台。这个四棱台就是摄像机坐标系的限制范围。

由于需要对摄像机坐标系的范围限制之外的物体进行裁剪,而用垂直于坐标轴的平面进行裁剪更为便捷,所以不多考虑的情况下,会认为在完成整个透视变换后再进行裁剪。然而,透视变换前后,物体的形状会发生变化,换言之透视变换不是仿射变换。由于裁剪后需要对颜色和纹理坐标进行插值,而透视变换前后,待插值点已经不满足线性关系,这就给裁剪带来困难。所以实际操作时透视变换分为两个阶段,第一个阶段进行仿射变换,变换后的齐次坐标的第四维度不为1,而为各点变换前的z值。第二阶段进行透视除法,各点坐标统一除以各自的z值,将齐次坐标的第四维度变换为1.裁剪工作将在这两个阶段中间进行,且不存在插值非线性的问题。

对于第一阶段的变换,由于知道最终需要将四棱台的范围变换到x和y均为-1到1,z为0到1的范围,而第二阶段又是所有坐标均除以了z,所依容易知道第一阶段变换后的结果。以x轴坐标为例,由于两阶段变换后的范围为-1到1,考虑到x方向的视角以及某点的z值,就可以求得z值处x值的上限和下限。由于上限对应于最终结果为1,考虑到相似关系,该点最终变换后的x坐标为原x坐标除以上限值,再在这个值的基础上乘以z,得到x方向第一阶段变换后的结果。依据这一结果,就可以列写第一阶段变换矩阵的第一列,当然它实质上就是一个缩放系数。对于y轴坐标,计算方式基本相同,唯一不同的地方是需要根据x方向的视角和宽高比,得到y方向的视角。对于z轴坐标而言,第一阶段变换后是az+b的形式,且a,b均为常数。而经过第二阶段除以z后,变为0到1,且最大的z对应1,最小的z对应0.求解这一关系对应的二元一次方程组即可得到a和b。对于变换矩阵的第四列,由于第一阶段后的结果为z。所以为(0,0,1,0)形式。综合上述过程就可以得到第一阶段的变换矩阵。当然,一般所说的透视变换矩阵就是这个矩阵,并不考虑第二阶段的除法问题。

下面补充说明能够在透视变换第一阶段结束后就可以进行简单的裁剪运算了。这里首先需要明确一点的是第一阶段结束后的坐标与第二阶段结束后的坐标,在三维空间中对应的是同一个点。做线性插值时,x、y、z坐标互不影响,所以这里仅以x坐标为例进行说明。此时将x轴与第4维度这里记为w,视为一组平面直角坐标系。经历完透视变换第一阶段后,各点的w值不同。而第二阶段工作,实质上就是将各点统一缩放到w=1的直线上。在这条直线上找到x=1的点,然后缩放到要进行线性插值的两点的直线上,该点即为第一阶段后的x=1对应的边界点。通过这个点的位置得到线性插值的系数,然后就可以用于纹理坐标或颜色的线性插值了。该点的正确性保证源自:1)第一阶段的变换是仿射变换,第一阶段变换前后,该点分割两点的距离比例不变;2)第二阶段进行前后,这个点都是x=1平面与连点连线的交点。

你可能感兴趣的:(学习笔记:计算机图形学中的几何变换初探续2)