流动贴图需要注意的问题

纹理坐标循环与流动效果优化

比如把一张水纹图片贴在一个quad上,然后让quad各顶点的s纹理坐标随时间递增,这样实现流动效果,即各顶点的s坐标按下式计算:

s=s0+time*speed

其中s0是最初的s坐标值。

但有一个问题,就是shader中纹理坐标v_texCoord精度是非常有限的,通常为mediump float,那么随着time的增加,s的值会变得很大,很快会使v_texCoord溢出,届时渲染效果会变得不正常,通常是流动效果卡顿并伴随马赛克,因此我们希望通过加减1的整数倍使纹理坐标wrap到较小的数值范围,然后再传入shader。

但这里有一点要特别注意,在做wrap时,我们要将quad所有顶点一起处理,而不能各顶点单独处理,例如我们要将某顶点的s坐标减1,则一定要同步地为其它各顶点也减1。例如经过一点时间后quad纹理坐标变为如下:

所有顶点的s都减1,变成:

二者显示结果是相同的。

但是如果对各顶点单独wrap,就可能出现下面结果:

显然是不对的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值