BoomBeach海水效果实现

本文详细介绍了BoomBeach游戏中海水效果的实现原理,主要通过shader技术,利用顶点着色器和片元着色器,结合纹理、颜色属性和uniform变量控制波动、浪花和光照效果。通过调整关键参数,如u_time、WAVE_HEIGHT和WAVE_MOVEMENT,可以实现逼真的海面动态效果。同时,文章提到了在2D引擎中应用这些技术可能遇到的问题及解决思路。
摘要由CSDN通过智能技术生成

        刚接触BoomBeach的时候,就十分欣赏他的海面效果,决心拿下SC的这项技术,经过几个月的努力总算有了成果。

        BB的海水说起来也并不难,就是用shader实现的,把他的包拿来解压就可以拿到shader源码和用到的texture,不再赘述。他的主岛场景和地图场景用到了不同的资源,但是原理是相同的,我就只讲主岛的海水实现了。

       

       这张texture就是玩家主岛海水的纹理。

       然后是顶点着色器:

#ifdef GL_ES
	#ifdef SIMPLE
	precision mediump float;
	#else
	precision highp float;
	#endif
#else
#define highp
#define mediump
#define lowp
#endif

//#define FOAM
#define SIMPLE

#ifndef SIMPLE
//#ifndef MEDIUM
#define LIGHTMAP
//#endif // MEDIUM
#define REFLECTION
#endif // SIMPLE
#ifdef FOAM
#ifndef SIMPLE
#define USE_FOAM
#endif // SIMPLE
#endif // FOAM

attribute vec4 a_position;
attribute vec2 a_texCoord;
attribute vec4 a_color;
// r = foam
// g = wave
// b = wind
// a = depth

varying vec4 v_wave;
varying highp vec2 v_bumpUv1;
#ifdef USE_FOAM
varying highp vec2 v_foamUv;
varying float v_foamPower;
#endif
varying vec3 v_darkColor;
varying vec3 v_lightColor;
varying float v_reflectionPower;

#ifdef LIGHTMAP
varying highp vec2 v_worldPos;
#endif

// uniform   mat4 u_mvp;

uniform highp float u_time;
uniform mediump float u_1DivLevelWidth;
uniform mediump float u_1DivLevelHeight;
uniform mediump float WAVE_HEIGHT;
uniform mediump float WAVE_MOVEMENT;

uniform mediump vec3 SHORE_DARK;
uniform mediump vec3 SHORE_LIGHT;
uniform mediump vec3 SEA_DARK;
uniform mediump vec3 SEA_LIGHT;

uniform mediump vec3 u_lightPos;

void main()
{
	vec4 pos = a_position;
	
	// Calculate new vertex position with wave
	float animTime = a_texCoord.y + u_time;
	highp float wave = cos(animTime);
	float waveHeightFactor = (wave + 1.0) * 0.5; // 0,1
    
	pos.y += WAVE_MOVEMENT * waveHeightFactor * a_color.g * a_color.b;
    
	pos.z += wave * WAVE_HEIGHT * a_color.b;
	gl_Position = CC_MVPMatrix * po
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 21
    评论
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值