深入探索透视纹理映射

1.


推出了投影之后的x’和原始z之间的关系——x’1/z是线性关系,y’1/z也是线形关系。


 

 

上图是在相机空间的俯视图,eye是眼睛的位置,也就是原点。npfp分别是近、远裁剪平面,NF分别是z=0到两个裁剪平面的距离。pq是一个三角形pqrxy平面上的两个点,p的坐标为(x, y, z),p’p投影之后的点,坐标为(x’, y’, z’),则有

 

 

另外,在相机空间中,三角形pqr是一个平面,因此它内部的每一条边上的xz,以及yz都是线性关系,即

 

 

 

这样,把上面投影之后的结果(1)带入这个线性式(2)(为了书写方便,现在开始我只处理x方向计算,y的情况一致),有

 


则我们通过这个式子推出了投影之后的x’和原始z之间的关系——x’1/z是线性关系,y’1/z也是线形关系。现在回忆我们上一篇文章中讲道的线性插值理论,我们可以说:因为x’y’1/z是线形关系,因此我们可以在投影面上通过x’y’1/z进行线性插值。至此我们可以得到这样的透视纹理映射思路:在投影平面上通过x’y’1/z线性插值,计算出1/z后,通过上面的(1)式计算出原始的xy,然后在3D空间中通过xy计算出stxyst都是在3D空间中的三角形上定义的,是线性关系)。这样就找到了投影面上一个点所对应的纹理坐标的正确值了。




有一个问题——计算次数太多了,有些繁琐——我们还需要在空间中再进行几次线性插值才能得到想要的东西。有没有更简单的方式呢?当然了!

我们注意到,在空间中,xyst都是线性的(因为三角形是平面),所以有关系

 

 

 

把(4)带入(1),有

 

 

 

把(3)带入上式的中间项,得到(常数都进行合并)

 

 

 

我们发现s/zt/zx’y’也是线性关系。而我们之前知道1/zx’y’是线性关系。则我们得出新的思路:对1/z关于x’y’插值得到1/z’,然后对s/zt/z关于x’y’进行插值得到s’/z’t’/z’,然后用s’/z’t’/z’分别除以1/z’,就得到了插值s’t’。这样就不用空间中的插值步骤了。

结论:

1)最终投影点xy1/z是线性关系

2)最终投影点xys/zt/z是线性关系



参考:

深入探索透视纹理映射(下) : http://blog.csdn.net/popy007/article/details/5570803


补充:


用垂直可视范围角度a和横纵比r构成的透视投影矩阵:

如果 vp = Mp * v0

那么值得主要的就是,vp.w = v0.z,

那么在Shader中看到  uv / pos.w 的话,那么就是相当于uv / pos.z,那么就是进行了上面说的 投影点xys/zt/z是线性关系 的变换。


(pos.w 具体是z还是-z要看使用的投影矩阵,OpenGL的话,就是-z,DX就是z)




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
纹理映射(Texture Mapping)是计算机图形学中的一项重要技术,它的主要作用是将二维图像或图案(称为纹理)映射到三维物体表面,从而增强物体表面的细节和真实感。 纹理映射的原理是将纹理图像中的每一个像素点映射到物体表面上的一个相应位置,通过对物体表面的像素点进行插值计算,实现纹理图像和物体表面的融合。在纹理映射中,需要考虑的关键问题包括纹理图像和物体表面之间的映射关系、纹理坐标的计算和插值算法等。 常用的纹理映射算法包括: 1. 环境纹理映射(Environment Mapping):将纹理映射到物体表面的法向量方向上,使物体表面看起来反射着周围环境的景象。 2. 投影纹理映射(Projection Mapping):将纹理图像通过透视变换映射到物体表面上,实现物体表面的真实感和立体感。 3. 顶点纹理映射(Vertex Texture Mapping):在物体表面的每个顶点处指定纹理坐标,通过插值算法计算出物体表面上其它像素点的纹理坐标。 4. 混合纹理映射(Blending Texture Mapping):将多个纹理图像混合在一起,生成一张新的纹理图像,再将其映射到物体表面上。 纹理映射技术在计算机图形学中得到广泛应用,可以用于模拟真实的物体表面纹理和颜色,增强图形渲染的真实感和细节,同时也可以用于游戏中的场景渲染、虚拟现实应用等领域。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值