纹理投影

在ShadowMap中有用一到一种技术就要纹理映射,一般我们在做模型的时候,又美术手动设置模型的UV坐标,在渲染时候用UV坐标去查询纹理。

在有情况下,我们根本知道UV坐标,那如何查询纹理呢?比如ShadowMap中,我们生成了depthMap那第二次渲染时候,如果使用这张贴图呢?

 

这里就得用到纹理投影

 

纹理映射字面上理解,就是把一张纹理投影到一个平面上,类似投影仪一样。这张说法很形象,但是实际做的时候正好相反!

做法流程是把模型贴到NDC,就是把模型坐标系变换到投影坐标,再规范到[0,1]。

纹理的投影的流程根据一张图可以很形象的表述

这张图片出于 《GPU编程- CG语言》作者写的很好,左边正常渲染流程的模型变换是从Modle->World->View->project 最终变换一个规则体 CVV空间中,PS:Range[-W,W],不是-1 和1 ,如果要变换到[-1,1]中那么 position.xyz =position.xyz/position.w

。在CVV空间中做裁剪,裁剪完投影。右边这种图片唯一的区别在于最后投影完 坐标要变换到[0,1]的纹理坐标中,上面说到了 经过MVP完是在[-w,w]中如果要变换到[0,1]中 我们可以

Step1:position.xyz =position.xyz/position.w ->[-1,1]

Step2: position.xyz = position * 0.5 + 0.5->[0,1];

 

这样就是用tex2d(sample,postion.xy)

基本教程上面方式是下面这种

顶点变换的时候 在MVP后面在乘上一个变换矩阵biasmatrix

这矩阵是就是XYZ 分量 乘0.5 + 0.5作,

,但是上面说过过去MVP变换的坐标系应该是在[-w,w]中

那么实际的坐标[0,w],所以 tex2d(sample,Position.xy/position.w);

或者你用一个系统提供的函数tex2dproj(sample,postion);

 

 

转载于:https://www.cnblogs.com/wbaoqing/p/3685632.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值