透视变换Perspective Transformation

什么是透视变换?图片 透视变换是一个投影过程,其中透视变换就像将人的眼睛当做一个中心点,外部世界是一个大平面,在眼睛与这个平面之间形成一个椎体,然后将这个平面上的内容投射到眼睛内。

为什么变换之后的空间被称为裁切空间?裁切就是把不需要的部分去除掉,就是这幅图片中一样,投影平面在左侧

而在投影中心另一侧的右侧的点我们是不需要的,假设这个点的坐标为

应用计算之后是

那么这个计算过程是如何进行的呢?根据相似三角形


Figure 1 (从P投射到P')

我们有

其中,由于我们的摄像机是看向方向的,所以在计算的时候前面要加号,这就是式子中的值为,计算是为


Look at the projection from another aspect

步骤

假设我们有一个矩阵

我们先让坐标分量等于,这样计算后的就等于,就可以满足如Figure 1中的

接下来,再调整分量从

这样一来,当除以分量从齐次转三维中的点时,除以分量相当于除以了分量,经过这样调整后我们有

其计算过程正好是我们想要的

其中,  ,  接下来我们就需要详细计算每个部分了

计算投影点的和坐标,将范围映射到[-1,1]

将投影点的z坐标重新映射到范围[-1,1]

(我们根据齐次转三维点时, 这三个分量都要除以分量,我们有

其中和对无影响),则上一步骤中的矩阵可以设为

其中A和B是我们要求的,则可以列出等式

注意这里的是中的,而不是这个矩阵中的分量
再根据我们已知正好落在近平面时应当等于,正好落在远平面时应当等于, 我们可以列出式子

(也可以映射到[0,1]范围内)

补充资料

  1. 关于

链接: https://www.scratchapixel.com/lessons/3d-basic-rendering/perspective-and-orthographic-projection-matrix/projection-matrices-what-you-need-to-know-first

  1. 为什么除以了呢?投影过程中的相似三角形中的比例关系

  2. 关于透视矩阵中的齐次项的

链接: https://www.scratchapixel.com/lessons/3d-basic-rendering/perspective-and-orthographic-projection-matrix/building-basic-perspective-projection-matrix

将原来透视矩阵中的变为之后, 就说当我们用这个透视矩阵的分量乘以一个齐次点 时,我们有 也就是说,这个齐次点的值经过矩阵计算之后从之前的变为了,同时,齐次点变为三维点时需要经过,此时这样就有

  1. 关于透视矩阵中的项的

链接: https://www.scratchapixel.com/lessons/3d-basic-rendering/perspective-and-orthographic-projection-matrix/building-basic-perspective-projection-matrix

因为摄像机是朝向方向的,所以摄像机前所有的点的坐标都是负的,这就是为什么【资料1】中 中的前方带有负号

透视变换矩阵

或

(注意其中两者之间的负号)

则我们有

其中

计算并验证一下,假设公式

代入和并计算得

其中和则得到结果