【3D数学基础:图形与游戏开发】矩阵(四)

4X4齐次矩阵

一、4D齐次空间

4D向量有4个分量,前3个是标准的x,y,z,第四个是w,有时称作齐次坐标。
为了理解标准3D坐标是怎样扩展到4D坐标 的,先看一下2D中的齐次坐标,它的形式为(x,y,z,w)。想象在3D中w=1处的标准2D平面。实际的2D点(x,y)用齐次坐标表示为(x,y,1),对于那些不在w=1平面上的点,则将他们投影到w=1 的平面上。所以齐次坐标(x,y,w)映射的实际2D点为(x/w,y/w,1)。


2D坐标

因此给定一个2D点(x,y),齐次坐标空间中有无数个点与之相对应。所有点的形式都为(kx,ky,k),k≠0。这些点构成一条穿过齐次原点的直线。
当w=0时,除法是没有意义的,因此不存在实际的2D点,但可以认为点(x,y,0)位于无穷远的点。这样就变成了描述一个方向而不是一个位置。
4D坐标的基本思想相同。可以认为3D点实在4D中W=1的“平面”上。4D点的形式为(x,y,z,w),将4D点投影到这个“平面”上,得到相应3D点(x/w,y/w,z/w,1)。w=0时表示无限远的点。描述的是方向,而不是位置。
而为什么会使用4D齐次坐标来表示变换,我个人觉得其实就是一种数学技巧,比如用4D来表示位移。

二、4X4平移矩阵

3X3变换矩阵表示的是线性变换,不包含平移。因为矩阵乘法的性质,零向量总是变换成零向量(如果想把(0,0,0)点平移,是无法做到的),因此任何能用矩阵乘法表达的变换都不包含平移。


4X4平移公式

即使是在4D中,矩阵乘法仍然是线性变换。矩阵乘法不能表达4D中的“平移”,4D零向量也总是被换成零向量。这个技巧之所以能在3D中平移点是因为实际上是在切边4D空间,与实际3D空间相对应的4D中的“平面”并没有穿过4D中的原点。因此可以用4D表示3D的平移。
一般性变换:
其实所有变换都是旋转,缩放,平移的任意组合。


一般性变换

三、一般仿射变换

用3X3矩阵仅能表达3D中的线性变换,没有加入平移。通过加入4X4的矩阵,使得平移也可以是"线性变换",就可以构造包含平移在内的一般仿射变换矩阵了,如:
①绕不通过原点的轴旋转
②沿不穿过原点的平面缩放
③沿不穿过原点的镜像
④向不穿过原点的平面投影
之所以可以这样做,就是因为加入了平移。一搬的变化都是先平移到某个坐标系下,然后进行旋转缩放等,然后在反向平移回来,以达到我们想要的坐标点。

你可能感兴趣的:(【3D数学基础:图形与游戏开发】矩阵(四))