图形投影变换

235 阅读2分钟

这是我参与12月更文挑战的第23天,活动详情查看:2021最后一次更文挑战

三维变换

缩放与平移

三维变换的缩放与平移和二维一样,都是用一个三维变换矩阵乘以点坐标

旋转

绕任意轴的旋转,可以分解为绕x绕y绕z的旋转

image.png

这个公式称为罗德里格斯旋转公式,阿尔法为旋转角度,n为旋转轴,旋转轴可以为任意一个轴。因为我们可以先平移,然后旋转,然后平移回来。

视图变换View Transformation

可以想想我们如何拍一个照片?

  • 模型变换,即照到拍摄的物体与场景

  • 视图变换,找到一个好的角度,摆好摄像机

  • 投影变换,拍摄照片

所以视图变换基本可以就是摆摄像机

首先我们要摆一下相机,即定义观测矩阵

  • 位置,从哪个位置观测

  • 观测方向,朝哪个方向观测

  • 观测法线,头顶朝哪

相机动或者物体动都是一样,我们通常都是约定相机不动,物体动,这样就可以把相机固定下来,即坐标的原点,相机的方向为-z,头朝y

这样定义一个相机,我们就需要按照这个规则对相机进行位置调整

  • 先平移,将相机移动到原点

  • 将观测方向旋转到-z

  • 将头旋转到指向y

后两步不好写,但是我们可以求它的逆操作,即由-z旋转到观测方向,然后再求该变换矩阵的逆矩阵(求转秩)

投影

分为正交投影及透视投影,正交投影原本平行的线依然平行,透视投影平行的线会交于一点

正交投影

正交投影非常简单,我们需要对一个物体这么操作

  1. 将物体中心移到原点

  2. 进行缩放到-1到1的立方体,会对物体进行拉伸

透视投影

透视投影用途广泛,在上面平行线不再平行,它是从一个点(相机)投射的一个四棱锥

我们可以通过特定的缩放,将透视投影变为正常的正交投影的形状,然后进行正交投影,最后反向缩放。