3D变换
- Use Homogeneous coordinates
- 三维空间中的变换矩阵
文章资源及内容来自 闫令琪博士的GAMES101课程
Use Homogeneous coordinates
我们使用齐次坐标,在三维空间中点和向量的表示如下
3D point = (x,y,z,1)T
3D vertex = (x,y,z,0)T
一般情况下,(x,y,z,w),若w = 0,则表示这是个向量。
若w≠0,且w = 1,则表示三维坐标中的一个点。那么,当w≠1的时候,我们可以定义以下的运算:
(x/w ,y/w ,z/w ,1)
我们可以得出一个结论,其实x,y,z,w在三维空间中的点的表示,实际上是这样:
(x/w ,y/w ,z/w )
我们上一章说,在三维空间中,也可以用齐次坐标来表示变换,只是原本从3X3的矩阵变成了4X4的矩阵,而这个4X4的矩阵还是满足一定的规律的,大概如下图:
和二维空间一样,我们在三维空间的变换中,先应用线性变换,再应用平移变换。
三维空间中的变换矩阵
类比的来看,我们可以从二维空间的变换中得到三维空间的变换矩阵。
首先是缩放矩阵:
X、Y和Z可以自由的缩放,缩放的轴可以各不相同,每一个缩放都会影响自己的轴。
然后是平移矩阵:
平移也是一样,每个轴的平移都影响的是自己。
最复杂的是旋转矩阵。我们先从简单的按轴旋转写
以上分别是按X轴旋转,按Y轴旋转,按Z轴旋转。
我们发现当一个面绕着X轴旋转时,X轴的坐标是不变的,Y轴和Z轴都在进行旋转,反应再矩阵的第一行就是1,0,0
同理,可以推出绕着Y轴旋转和绕着Z轴旋转的情况。
我们发现沿着Y轴旋转时和另外两个轴不同在于,-sinα与sinα交换了位置。我们由上面的示意图可以看出,向量X与向量Z的叉乘得到-Y(右手定则)。图中的Y是由向量Z与向量X叉乘得到的,所以是反的。
这就是三维空间中最简单的按轴旋转。
进行复杂的旋转时,我们可以用简单的旋转进行表示。如
任意一个3D旋转,都可以写成按X轴Y轴Z轴的组合,旋转的量分别为α、β、γ角,这三个角也叫欧拉角
如果我们要沿着任意轴旋转,我们可以先把这个轴的起点平移到原点,旋转完成之后再平移回去。
在二维平面中,如果我们不采用齐次坐标的方式来表示旋转,一般会用以下坐标来表示:
那我们如果旋转-θ角度,则
我们学的高中三角函数可以得到
COS(-θ)=COSθ
SIN(-θ)=-SINθ
这两个矩阵对比我们可以发现,旋转-θ形成的矩阵就等于旋转θ形成的矩阵的转置
从定义上看,旋转θ和旋转-θ是一个互逆的操作,所以Rθ与R-θ是互逆的,而且R-θ=Rθт
所以Rθ其实是个正交矩阵