码迷,mamicode.com
首页 > 其他好文 > 详细

流动贴图需要注意的问题

时间:2015-04-08 23:16:34      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

比如把一张水纹图片贴在一个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,就可能出现下面结果:

技术分享

显然是不对的。

流动贴图需要注意的问题

标签:

原文地址:http://www.cnblogs.com/wantnon/p/4403976.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!