lecture-5
四维齐次空间
对于4维齐次空间来说,第四个分量是w,有时也称为齐次坐标,这个w并不代表时间。为了便于理解理解从标准物理三维空间是如何扩展到四维的,可以先来看一下二维扩展到三维
二维下的齐次坐标,其形式为(x,y,w),以w=1为例,在三维中w=1处的标准二维平面,实际二维点(x,y),其齐次坐标(x,y,1),对于那些不在w=1平面上的点,可以通过除w,将他们“投影”到w=1平面上,这样齐次坐标(x,y,w)就可以映射到二维点(x/w,y/w),注意这里的投影指的是就是过原点与w=1的直线在w=1位置的投影这也是齐次坐标的几何含义(可以理解为原点到(x,y,w)点的向量与w=1平面的交点)
对于任意给定的二维点(x,y),在齐次空间中存在无限数量的对应点,所有点的形式都是(kx,ky,k),条件是k!=0.这些点形成一条原点的直线
当w=0,被解释为“无限远的点”此时表示一个矢量方向,其余情况可以理解为位置坐标
通过除以w的方法产生的齐次坐标和投影是有意义的,使用四维矢量和4x4矩阵为我们表示的方便(这里的表示,可以指的是将仿射变换都可以统一的表示出来),另外还可以实现透视投影
4x4平移矩阵
由于齐次矩阵,我们可以将平移也统一到4x4矩阵中,假设w=1,标准三维矢量[x,y,z]将始终在四维中表示为[x,y,z,1],并将3x3变换矩阵转换为4x4矩阵
现在让我们计算标准三维矢量与3x3矩阵
再比较一下四维矢量与4x4矩阵
发现他们的区别只是附加了一个坐标(w=1),而得到的结果与标准3x3是一样的
那么我们平移则可以 将4x4矩阵改造成这样
在之前记录过一句话,虽然平移变换可以使用矩阵乘法实现,但它不是线性变换。但是4x4平移矩阵乘法本身是线性变换,但是当我们将其应用于齐次坐标表示的三维点时,它实际上实现了一个仿射变换。
这个技巧能在三维中实现平移的操作其实实际上是在错切四维空间,,对应于物理三维空间的四维超平面不会通过四维的原点(物理三维空间中的点在齐次坐标系中表示为 (x, y, z, 1)。注意到点的第四个坐标总是 1,而不是 0。这意味着这些点位于 W = 1 的四维超平面上,而不是经过四维空间的原点),因此当错切四维空间的时候,能够进行三维中的移动
通过4x4平移矩阵,我们就可以让平移变换与旋转缩放等变换一起使用了,例如想对依次实现旋转之后缩放然后再平移然后再缩放就可以直接写成这样:
(行主序),我们将除开平移变换的矩阵应用结果矩阵记为M,平移矢量记为t,则可以这样来表示应用所有变换之后的矩阵:
除此之外w的值可以控制平移是否会被真正应用
当w=0时\\
[x,y,z,0]\begin{bmatrix}
m_{11} & m_{12} & m_{13} & 0\\
m_{21} & m_{22} & m_{23} & 0\\
m_{31} & m_{32} & m_{33} & 0\\
0 & 0 & 0 & 1\\
\end{bmatrix} =[xm_{11}+ym_{21}+zm_{31},xm_{12}+ym_{22}+zm_{32},xm_{13}+ym_{23}+zm_{33},0]\\
当将形式为[x,y,z,0]的无穷远的点的矢量乘以包含旋转、缩放等的变换矩阵时,会发生预期的变换,结果时另一个形式为[x',y',z',0]的无穷远的点的矢量\\
而当形式为[x,y,z,0]的无穷远的点的矢量乘以包含平移的变换矩阵时,会得到一样的结果\\
[x,y,z,0]\begin{bmatrix}
m_{11} & m_{12} & m_{13} & 0\\
m_{21} & m_{22} & m_{23} & 0\\
m_{31} & m_{32} & m_{33} & 0\\
\Delta{x} & \Delta{y} & \Delta{z} & 1\\
\end{bmatrix} =[xm_{11}+ym_{21}+zm_{31},xm_{12}+ym_{22}+zm_{32},xm_{13}+ym_{23}+zm_{33},0]\\
也就是说不会发生平移\\
四维矢量的w可以选择性的控制4x4矩阵的平移部分
另外对于围绕不穿过原点的轴旋转、围绕不穿过原点的平面进行缩放、围绕不穿过原点的平面反射、再不穿过原点的平面上进行正交投影等的基本思想都是将变换的中心都通过平移变换移到原点,再执行相关线性变换,然后再平移会回始位置
透视投影
三维透视投影到二维平面,其中投影线并不平行,相交于一点,这个点称之为投影中心,位于投影中心后面的图像与原图像是颠倒的,这是由于投影中心位于投影平面的前方,投影线在撞击平面之前交叉,因此图像被反转,当将物体移动到原理投影中心时,其正交投影保持不变,透视投影变小(透视缩短)
投影平面
存在一个三维空间,其原点位于针孔,z轴垂直于投影平面,x、y轴平行于投影平面,,对于任意点p,是否能计算p’的三维坐标,p’是p通过针孔投影到投影平面上的,首先需要知道针孔到投影平面的距离(距离计为d),因此,投影平面可以有方程z=-d来定义,然后我们需要求得y,通过类似三角形我们可以得到
但是在实践中,额外的-号会产生不必要的复杂性,所以我们可以将投影平面移到距离投影中心的前面来,这样就可以在计算上消除-号
透视投影矩阵
从四维空间转换到三维意味着除法,所以可以在4x4矩阵中编码透视投影,其想法是将和x,y,z的公分母提出一个等式,然后设置一个4x4的矩阵,将w设置为等于这个分母,例如
p^{'} = [dx/z,dy/z,d] = [dx/z,dy/z,dz/z] = \frac{[x,y,z]}{z/d}\\
这样四维点将可以是以下的形式:[x,y,z,z/d]\\
送一需要一个4x4矩阵,他将乘以一个齐次矢量[x,y,z,1]以产生[x,y,z,z/d]执行此操作的矩阵\\
[x,y,z,1]\begin{bmatrix}
1 & 0 & 0 & 0 \\
0 & 1 & 0 & 0 \\
0 & 0 & 1 & 1/d \\
0 & 0 & 0 & 0 \\
\end{bmatrix} = [x,y,z,z/d]
因此,我们有一些4x4投影矩阵的相关结论:
- 此矩阵的乘法并不真正执行透视变换(非透视矩阵),他只是计算恰当的分母给w,当通过除以w将四维转换为3维是,就会真正执行透视除法
- 他有许多变体,例如,可以将投影平面置于z=0,投影中心置于[0,0,-d]
- 4x4矩阵将投影表示为变换的方法,并且该变换可以与其他变换链接,投影到非轴对齐平也是有可能的
- 我们并非需要齐次坐标来执行投影变换,而是4x4矩阵给我们提供了一种简明操作投影变换的方式
- 大多数图形系统应用归一化的比例因子,使得在远处剪辑平面处w=1,这确保了深度缓冲的值适合于正在被渲染的场景,以最大化深度缓冲的精度
- 大多数图形系统还会根据相机的事业缩放x和y的值