这是我参与12月更文挑战的第23天,活动详情查看:2021最后一次更文挑战
三维变换
缩放与平移
三维变换的缩放与平移和二维一样,都是用一个三维变换矩阵乘以点坐标
旋转
绕任意轴的旋转,可以分解为绕x绕y绕z的旋转
这个公式称为罗德里格斯旋转公式,阿尔法为旋转角度,n为旋转轴,旋转轴可以为任意一个轴。因为我们可以先平移,然后旋转,然后平移回来。
视图变换View Transformation
可以想想我们如何拍一个照片?
-
模型变换,即照到拍摄的物体与场景
-
视图变换,找到一个好的角度,摆好摄像机
-
投影变换,拍摄照片
所以视图变换基本可以就是摆摄像机
首先我们要摆一下相机,即定义观测矩阵
-
位置,从哪个位置观测
-
观测方向,朝哪个方向观测
-
观测法线,头顶朝哪
相机动或者物体动都是一样,我们通常都是约定相机不动,物体动,这样就可以把相机固定下来,即坐标的原点,相机的方向为-z,头朝y
这样定义一个相机,我们就需要按照这个规则对相机进行位置调整
-
先平移,将相机移动到原点
-
将观测方向旋转到-z
-
将头旋转到指向y
后两步不好写,但是我们可以求它的逆操作,即由-z旋转到观测方向,然后再求该变换矩阵的逆矩阵(求转秩)
投影
分为正交投影及透视投影,正交投影原本平行的线依然平行,透视投影平行的线会交于一点
正交投影
正交投影非常简单,我们需要对一个物体这么操作
-
将物体中心移到原点
-
进行缩放到-1到1的立方体,会对物体进行拉伸
透视投影
透视投影用途广泛,在上面平行线不再平行,它是从一个点(相机)投射的一个四棱锥
我们可以通过特定的缩放,将透视投影变为正常的正交投影的形状,然后进行正交投影,最后反向缩放。