大家好,在上一节的学习中,我们已经掌握了如何使用Cocos2d-x加载鱼的模型和播放鱼的动画,这一节我们来学习一下如何为鱼的模型增加波光处理,以使它看起来像在海水中游动。
在模型的身上加入波光的感觉,是通过纹理动画来实现的,其原理是给模型增加一个纹理,并循环的移动纹理贴图寻址的UV坐标,这样贴在模型表面的纹理就会按照不断变化的UV值来产生出贴图运动的效果。下面我们来实际做一下这个效果。
我们需要用到Shader文件UVAnimation.vsh和UVAnimation.fsh,它们在Resources\3D目录中。UVAnimation.vsh是一个模型骨骼动画的计算Shader,而UV动画的效果在UVAnimation.fsh中进行处理:
1
2
3
4
5
6
7
8
9
10
11
12
|
uniform sampler2D u_texture1;
uniform sampler2D u_lightTexture;
uniform vec4 v_LightColor;
//颜色色彩
uniform vec2 v_animLight;
//UV动画纹理偏移
varying vec2 v_texCoord;
//模型的纹理UV值
void
main(
void
)
{
//通过UV值的移动形成UV动画
vec4 lightcolor = texture2D(u_lightTexture, v_texCoord + v_animLight.xy) * v_LightColor;
gl_FragColor = texture2D(u_texture1, v_texCoord) + lightcolor;
}
|
然后我们需要一张波光图caustics.png,它是黑白图,用于在模型上增加色值操作,这样的话,黑色的区域色值为0,与鱼原来的纹理色值相加不变,而白色区域的值大于0,与鱼原来的纹理色值相加后会有增亮效果。这张图我们放在工程的Resources\3D目录中。
我们在FishLayer中增加一个变化的UV值:
1
|
Vec2 _lightani;
|
在FishLayer::init函数中,我们将上面所写的vsh,fsh等组合成鱼模型可以使用的Shader并使用它:
1
2
3
4
5
6
7
|