投影纹理映射(Projective Texture Mapping)详解

本文深入解析了投影纹理映射的概念,通过对比常规顶点坐标转换流程,阐述了如何计算投影纹理坐标,并介绍了Unity中实现投影纹理映射的简单程序测试。关键步骤包括将视点视为投影机,对模型空间顶点坐标求得投影纹理坐标并进行归一化处理。投影纹理坐标在应用前还需除以w分量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

投影纹理映射(Projective Texture Mapping)目的是映射一张纹理到物体上,就像将幻灯片投影到墙上一样。该方法不需要在应用程序中指定顶点纹理坐标,实际上,投影纹理映射中使用的纹理坐标是在顶点着色程序中通过视点矩阵和投影矩阵计算得到的,通常也被称作投影纹理坐标(coordinates in projective space)。而我们常用的纹理坐标是在建模软件中通过手工调整纹理和3D 模型的对应关系而产生的。
投影纹理映射有两大优点:
第一,将纹理与空间顶点进行实时对应,不需要预先在建模软件中生成纹理坐标。很多情况下,我们需要将场景渲染两遍,第一遍是为了获取场景信息,得到的场景信息通常保存为一张纹理(eg.Depth);然后基于上述预计算纹理进行第二次渲染;第二次渲染结果才是最终显示到屏幕上的效果。为了在第二次渲染中使用到预计算的纹理(无预先设置的纹理坐标),需要时时进行纹理计算,这时就可以使用投影纹理映射技术。实际上,这也是投影纹理映射技术的最广泛的应用了。
第二,使用投影纹理映射,可以有效的避免纹理扭曲现象。将一张纹理投影到两个三角面片上,它们的顶点纹理坐标相同,但是由于三角面片形状不同,插值出来的内部点的纹理坐标也会产生不同的梯度(gradient),最后纹理颜色在两个三角面片上的分布也是不一样的。
根据顶点坐标获得纹理坐标的本质是将顶点坐标投影到NDC平面上,此时投影点的平面坐标即为纹理坐标。如果你将当前视点作为投影机,那么在顶点着色程序中通过 POSTION 语义词输出的顶点投影坐标,就是当前视点下的投影纹理坐标没有被归一化的表达形式。

“Projective texture mapping”文章中有一幅比较著名的图片,说明计算纹理投影坐标的过程,如下图所示。


左图是正常的顶点坐标空间转换流程,无非是顶点从模型坐标空间转换到世界坐标空间,然后从世界坐标空间转换到视点空间,再从视点空间转换到裁剪空间,然后投影到视锥近平面,经过这些步骤,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值