透视投影后的线性插值校正

许多着色方法都要用到顶点间的线性插值,譬如逐像素着色的Phong Shading往往需要进行纹理坐标等的线性插值。然而,透视投影会导致直接在屏幕空间进行线性插值得到的结果不正确,如下图:

clip_image002

在屏幕上进行的线性插值并不对应在物体上的线性插值,这将导致一系列与该插值相关的着色结果出现错误。譬如,如果在屏幕上直接插值纹理坐标,会得到下图中右边的结果(左边为正确的结果):

clip_image004

解决该问题的一种方式是利用clip_image006在屏幕空间的线性性。假设坐标为clip_image008clip_image010的点分别被投影到屏幕上坐标为clip_image012clip_image014的位置,直线clip_image016的方程为clip_image018,如下图:

clip_image020

若以clip_image022为原点,易见有

clip_image024

整理得

clip_image026

clip_image028代入方程clip_image030并整理可得

clip_image032

类似地,有以下方程成立:

clip_image034

类似的式子对clip_image036上的每一点及其投影点都成立。现考虑在clip_image038clip_image040间进行的线性插值clip_image042,有:

clip_image044

由此可知,在屏幕上进行的线性插值对应于在投影前空间中对clip_image006[1]的线性插值。现假设要在clip_image008[1]clip_image010[1]间对属性值clip_image046clip_image048进行线性插值得到clip_image050,易知——

clip_image052

整理得

clip_image054

现在屏幕空间对clip_image006[2]进行线性插值,即

clip_image056

将上式代入clip_image050[1]表达式得

clip_image058

这就得到了正确的对clip_image060插值的方法:在屏幕空间中对clip_image006[3]clip_image062分别进行线性插值得到clip_image064clip_image066,然后用后者除以前者,即得到clip_image050[2]

以上推导仅考虑了clip_image068clip_image070坐标,现考虑三角形clip_image072上进行的线性插值,假设屏幕上线性插值的权重为clip_image074clip_image076,真实三角形上对应的权重为clip_image078clip_image080,故有

clip_image082

clip_image084

clip_image086

注意到clip_image088clip_image090,代入得到

clip_image082[1]

clip_image092

clip_image094

解得

clip_image096

clip_image098

这就得到了根据clip_image100求出clip_image102的公式。由于在透视投影变换后、坐标齐次化之前,clip_image070[1]clip_image104的比值是一定的,因此上面两个公式中的clip_image070[2]坐标均可换成透视投影变换后、坐标齐次化之前对应的clip_image104[1]坐标。

转载于:https://www.cnblogs.com/AirGuanZ/p/6240219.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值