坐标系变换是图形学中最基础的部分,一个物体从建模到显示在屏幕,经历了从物体坐标系到世界坐标系,再从世界坐标系到观察坐标系,最后通过投影到2D平面,再变换到屏幕坐标等一系列过程。


        投影矩阵


        我们可以很容易地从线性代数的角度解释这一现象:这相当于把物体从一个空间投影变换到了另一个空间,类似于傅立叶、离散余弦、特征人脸等一系列空间变换,我们把同样的信息用不同的基底来描述,来表达我们更关注的信息。

        我们称世界坐标系为Oxyz,用矩阵A表示。指定相机坐标系uvw,用矩阵B表示,使用OGL中的glutLookAt函数,首先需要用两个三维向量分别指定相机的位置和观察的位置,以相机位置为原点,两点位置作为其中一条坐标轴,称为z轴,然后需要一个三维向量来代表头顶向上的位置,随后会根据z轴和头顶向上位置的向量做一个叉乘,得到另一个坐标轴,称为x轴。再将x轴和z轴叉乘,得到最后一个坐标轴,称为z轴。


        从数学的角度,我们计算 T B = A,其中T就是投影矩阵,只需求出T即可。


        变换过程 : 平移 + 旋转


        直观来看,整个过程相当于将观察坐标系本身变换到世界坐标系。我们可以从最简单的入手来理解这一问题,在世界坐标系中,它的原点的表示为(0,0,0),那么在相机坐标系中,世界坐标系的原点的表达经历了从以相机坐标系原点为起点,世界坐标系为终点的向量的变换。我们只要求出这一向量即可。

        如果你还不能理解,我们可以把问题降到一维上:世界坐标系的原点为(0,0,0),相机坐标系的原点为(1,0,0),那么对于相机坐标系而言,世界坐标系的(0,0,0)就相当于相机坐标系里的(-1,0,0),经历的变换也就是从相机坐标系原点指向世界坐标系原点的向量。


         在经历了原点的平移后,接下来需要进行旋转变换使得两个坐标系重合。如果我们考虑的是绕轴旋转,那个这个旋转是没有办法一次到位的。我们称观察坐标系三个坐标轴为(x0,y0,z0),世界的三个坐标轴为(x,y,z),以左手坐标系为例。

         具体而言,我们以x0轴为例,可以先将x0轴绕x轴旋转到xOy所在的平面上,再将x0轴绕z轴旋转到xOz所在的平面,这样x轴与x0轴重合,两个坐标系重合。

计算机图形学五大坐标系_叉乘