模型视图变换矩阵的推导

时间:2024-04-02 18:27:55

图形学上课的时候,????坐在第一排划拉瑟图 ,老师突然布置了个作业:推导mv变换的矩阵常言道上山容易下山难之用轮一时爽,造轮火葬场 ,这可把????急坏了,周末就嗯搁这埋头一顿推。推了挺久的 今天记录一下过程。

mv矩阵的目的是将世界坐标系下的坐标转到相机坐标系下,即通过世界坐标表示相机坐标。其实就是一些平移和旋转变换,然后将坐标系转换即可。所以我们要求得两个变换的矩阵:

  1. 旋转变换矩阵
  2. 平移变换矩阵

然后把两个矩阵相乘,得到最终的变换矩阵 M,这个 M 矩阵左乘世界坐标系下的齐次坐标,能够帮助我们将世界坐标转为相机坐标。

好了 背景介绍到这里,❀不多????,开冲!

我们转换的第一步,就是确定相机坐标系的标架。假设已知世界坐标系下:

  1. 相机原点 p 点坐标
  2. 视平面法线 n
  3. 竖直向上向量 vup (在世界坐标中为 (0, 1, 0))

那么我们可以计算 vup 在视平面上的投影v,即平行于视平面的竖直向上分量。方法是通过三角形法则。随后通过n和v的叉乘表示出最后一个轴u:

模型视图变换矩阵的推导

将 u,v,n 归一化之后,我们得到在世界坐标系下,相机坐标系三个坐标轴指向的方向。

因为 u,v,n 都是归一化的向量,那么我们认为 u,v,n 就是世界坐标系下,相机坐标系的三个基向量。根据右手坐标系法则:u,v,n 向量对应的坐标轴为:

模型视图变换矩阵的推导

那么我们可以建立一个坐标轴旋转变换矩阵 A,其中A能够将相机坐标系下的坐标转换到世界坐标系,那么容易得出A的表达式:

模型视图变换矩阵的推导

其中以二维情况举例,验证A的表达的正确性:

模型视图变换矩阵的推导
上述的 A 矩阵描述了从相机坐标系转换到世界坐标系的过程,其中有:

模型视图变换矩阵的推导

又因为我们希望通过世界坐标表示相机坐标,即通过 xyz 表示 uvn ,那么我们需要进行转换:

模型视图变换矩阵的推导
所以我们希望求得 A 矩阵的逆矩阵,幸运的是,A是一个正交矩阵,这意味着:

模型视图变换矩阵的推导

所以最终的旋转矩阵(世界坐标转眼坐标),我们称之为R,那么有:

模型视图变换矩阵的推导

此外,我们还需引入平移矩阵T。因为相机的中心坐标 p 点在世界坐标系下的坐标为 (x, y, z),且平移变换仅涉及常数的相加!

假设世界坐标系下点坐标为p’ 相机坐标系下点坐标为p,那么有:

模型视图变换矩阵的推导

因为我们希望通过世界坐标表示相机坐标,所以有:

模型视图变换矩阵的推导

因齐次坐标的常数相加集中在最后一列,易得从世界坐标系到相机坐标系的平移矩阵 T 为:

模型视图变换矩阵的推导

因为最终我们是通过旋转和变换的结合,将坐标进行转换。根据 M = R * T,我们结合平移和旋转矩阵,可以得出mv变换矩阵 M 的表达式为:

模型视图变换矩阵的推导

推完了 Orz

模型视图变换矩阵的推导