当进行 Direct 3D 编程时,我们需要先将要变换的点或向量转为齐次坐标,然后再通过矩阵来进行变换操作。那么,怎样将点和向量转为齐次坐标呢?
工具/原料
DirectX
一、为什么要转换为齐次坐标
1、进行 Direct 3D 编程时,需要使用4×4 的变换矩阵,这种矩阵可以定义所需要的各种变换。
2、当进行坐标变换时,需要将空间中的点或 3D 向量与变换矩阵相乘。但是,空间中的点或向量都只有 x,y,z 三个坐标分量,而一个 3 维的点或向量是无法与一个4×4 的矩阵相乘的。
3、因此,必须将点或向量扩展为一个四元组。这个扩展后的点或向量的四元组即称为齐次坐标。
二、怎样将点或向量转换为齐次坐标
1、要将点或向量转换为齐次坐标,只需要处理好新增的第四个分量即可。在这里,我们通过将第四个分量定义为 0 或 1,来描述前面三个坐标分量是向量的还是点的坐标。
2、如果第四个分量为 0,则前面x,y,z 三个坐标分量描述的是一个向量。
3、如果第四个分量为 1,则前面x,y,z 三个坐标分量描述的是一个点。
4、通过定义,我们同时得到以下性质:1)两点相减的结果是一个向量(因为两个点第四个分量都为 1,相减之后变为了 0)2)一个点与一个向量相加的结果是一个点(点的第四个分量为 1,而向量的第四个分量为 0,1+0=1,因此相加的结果是一个点)