关于透视投影得到的深度为什么是非线性的

透视投影会将坐标由观察空间投影到NDC空间中,而其中的x,y坐标比较简单,通过相似三角形的原理,将坐标投影到近平面,得到的二维坐标再经过一点线性变换就是NDC坐标的前两个分量.
如下图,p’在近平面np上可以得到一个二维坐标.

在这里插入图片描述

经过变换后我们得到了NDC坐标中的x和y分量,记为Xn和Yn,这个二维坐标与观察空间中的z坐标Ze有关,且是跟1/Ze有关,而且我们需要单纯通过矩阵乘法从观察空间转换到NDC空间中,显然只靠乘法是无法表达出1/Ze的,还需要在乘以投影矩阵后在进行透视除法,所有的分量都除以w,使得w为1,而如果w=k*Ze的话(一般取w=-Ze),我们就可以表达出Xn,Yn与1/Ze的关系了.因此我们最后必须令w=-Ze.

接着往下,我们还想在投影变换得到的齐次坐标中能够查询到点的深度值,那可以直接在刚刚推导出的未经透视除法处理的坐标中直接填入Ze吗?也就是(Xn*(-Ze),Yn*(-Ze),Ze,-Ze)?显然不行,Ze/(-Ze)为常数,经过透视除法后z分量就没有深度信息了.
点的深度值与观察空间中的x,y坐标无关,因此在矩阵乘法中z分量对应的那一行的乘以x,y的两个系数必须为0,只剩与Ze有关的系数A和与常量1有关的系数B,我们只能令经过透视变换的齐次坐标的z=A*Ze+B

  • (如果A=0,经过透视除法后得到B/(-Ze),确实保留了Ze的信息,但是我们对Zn还有两个要求,当Ze=远平面时,Zn=1,Ze=近平面时,Zn=-1,而只有一个系数B的Zn无法满足我们的要求,B是无解的)
  • (如果B=0,其实就是上面的情况,经过透视除法后Zn=A,与Ze无关,我们无法从这样得到的NDC坐标中获取深度值)

A和B只需要利用上面提到的两个条件解二元一次方程组就能得到了,因此,我们最终得到Zn=A+B/(-Ze),这样的形式才能符合我们的要求,z在(-1,1)上,且与Ze有函数关系.

图片源自:
博客园:为什么透视计算的深度是非线性深度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值