30-空间变换—透视投影变换
透视投影
视线从摄像机位置出发,看下-z方向,可视范围是near到far之间,形成一个视锥体;所有的物体都会被投影在近平面near上;其特点是有近大远小的效果

透视投影定义数据
可视范围: near、far
近平面范围: left、right、top、bottom

透视投影盒空间
透视投影变换的最终目的,是将视锥体内部的物体压缩到一个xyz为-1到1的盒体内,即物体坐标化为NDC坐标,从而与正交投影统一后续计算

投影坐标计算
数据定义: e(eye)坐标,即视图变换后的坐标;逆y轴看下去,得到如下图像,可知:

逆x轴看下去,得到如下图像,可知:

投影平面与NDC
目前已知投影在近平面的P点x/y/z坐标值,下面需要将其缩放到-1到1的NDC坐标系内
近平面上点坐标与NDC坐标对应关系如下,即线性关系,y坐标举例

NDC与e坐标
已知条件如下:

使用下列等式替换:

在Ze≠0的条件下,可以得到:

NDC与e坐标——剪裁空间坐标
总结: Ze≠0 情况下

Zmdc的表达式还没有计算出来,考虑到兼容Ze=0 的情况,使用齐次坐标表达:

注意! Ze为0,Pc的xyz不一定为0

理解Pc坐标的含义:
1、 它是一个齐次坐标,三维数据需要除以w
2、它的出现是为了兼容Ze=0 情况下的表达
3、其中c的含义是clip,以后会用于剪裁空间剪裁
构建从视图空间坐标到剪裁空间坐标变换矩阵
首先可以写作如下形式,因为最终结果一定满足: W=-Ze

观察Pc的x/y/z坐标公式,可以得到如下矩阵:(此时只剩下跟z相关的第三行数据未知)

假设视图变换后的坐标,位于近平面上,即Ze=-n;
此时x/y可以取任意平面内的值,而z最终得到的NDC坐标永远都是-1,可以得到如下矩阵:

任取近平面上的点,可知 Ze=-n Zndc=-1
任取远平面上的点,可知 Ze=-f Zndc=1
代入矩阵乘法可知:

透视投影变换矩阵
最终透视投影矩阵如下(转换到剪裁空间,没有做除以w的操作,即没有做透视除法)

参数代换
一般情况下,构造透视投影矩阵需要如下参数及条件:
1、近平面n,远平面f
2、y方向视张角fovy
3、近平面横/纵的百分比aspect
4、近平面相对y轴左右对称,相对x轴上下对称

替换t-b

替换r-l,使用横纵比

替换矩阵当中的元素

最终形态——透视投影变换矩阵
已知视锥体参数,得到其透视投影矩阵(到剪裁空间/无透视除法):
近平面n,远平面f
y方向视张角fovy
近平面横/纵的百分比aspect

