图形学上课的时候,👴坐在第一排划拉瑟图 ,老师突然布置了个作业:推导mv变换的矩阵。常言道上山容易下山难之用轮一时爽,造轮火葬场 ,这可把👴急坏了,周末就嗯搁这埋头一顿推。推了挺久的 今天记录一下过程。
mv矩阵的目的是将世界坐标系下的坐标转到相机坐标系下,即通过世界坐标表示相机坐标。其实就是一些平移和旋转变换,然后将坐标系转换即可。所以我们要求得两个变换的矩阵:
- 旋转变换矩阵
- 平移变换矩阵
然后把两个矩阵相乘,得到最终的变换矩阵 M,这个 M 矩阵左乘世界坐标系下的齐次坐标,能够帮助我们将世界坐标转为相机坐标。
好了 背景介绍到这里,❀不多🔒,开冲!
我们转换的第一步,就是确定相机坐标系的标架。假设已知世界坐标系下:
- 相机原点 p 点坐标
- 视平面法线 n
- 竖直向上向量 vup (在世界坐标中为 (0, 1, 0))
那么我们可以计算 vup 在视平面上的投影v,即平行于视平面的竖直向上分量。方法是通过三角形法则。随后通过n和v的叉乘表示出最后一个轴u:
将 u,v,n 归一化之后,我们得到在世界坐标系下,相机坐标系三个坐标轴指向的方向。
因为 u,v,n 都是归一化的向量,那么我们认为 u,v,n 就是世界坐标系下,相机坐标系的三个基向量。根据右手坐标系法则:u,v,n 向量对应的坐标轴为: