textrue坐标到uv的映射

前两天被shader里面一个奇怪的bug困扰了一下,其实就是一个最简单的问题,我有一个rgbafloat的贴图,只能点采样,因为存储的不是颜色是数据不能线性插值,而这时候我已知当前点的texture坐标x y和贴图尺寸w h如何计算这个位置的uv供shader采样?

       我直接使用了x/(w-1),  y/(h-1),结果是有问题的,如果x的取值是【0, w-1】,把他除以w-1,变成了 【0,1】的uv范围难道不对么(实时上它只在w和h是pot的时候是对的,NPOT全都是有问题的),结果我查了半天bug发现这个映射关系是错的,正确的映射应该是(x+0.5)/w  , (y+0.5)/h。为什么?

      这里的原因还是很基础的在gpu上textrue的uv的分布。在gpu上textrue的uv分布是


看到它的左上角中心不是0,而是在左上角的边缘处!

而在cpu上我们通常认为texture的像素的xy分布是


它的左上角的0位于中心处!


所以你拿着一个算好的贴图的x,y的像素坐标,要找他的u,v要往后面多挪0.5的像素,最后除整个尺寸!不是x/(w-1)也不是x/w而是(x+ 0.5)/w,当然uv返回xy 就变成了 w*u -0.5.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值