【Cocos Shader】2D灯光及遮罩效果
2015-10-27 08:33
821 查看
Shader实现:
vs: light2d.vert
attribute vec4 a_position; attribute vec2 a_texCoord; #ifdef GL_ES varying mediump vec2 v_texCoord; varying mediump vec2 v_position;//将顶点的位置传给ps,用于计算该顶点与灯的距离 #else varying vec2 v_texCoord; varying vec2 v_position; #endif void main() { v_position = a_position.xy; gl_Position = CC_PMatrix * a_position; v_texCoord = a_texCoord; }
ps: light2d.frag
#ifdef GL_ES varying lowp vec2 v_texCoord; varying mediump vec2 v_position; #else varying vec2 v_texCoord; varying vec2 v_position; #endif uniform vec2 u_lightPosition; uniform vec4 u_lightColor; uniform float u_lightRange; vec4 getRenderColor(vec2 texPos, vec2 lightPos, float lightRange) { vec2 pos = texPos - lightPos; float d = length(pos);//顶点与灯的距离 float rgb;//相当于光强度 if(d>30.0)//距离大于30,在lightRange范围内,灯光离灯心越远颜色越亮的遮罩效果,下面需要对颜色进行反转以实现灯光变亮 rgb = (d-30)/(lightRange); else//距离小于30灯光最强,为白色 rgb = 0.0; rgb = 1.0 - clamp(rgb, 0.0, 1.0);//clamp意义为 min(max(a, b), c);将a的大小限制在b,c之间, 1-rgb是将颜色反转 return vec4(rgb, rgb, rgb, 1.0); } void main() { vec4 color = u_lightColor * getRenderColor(v_position, u_lightPosition, u_lightRange);//灯光颜色与灯光强度混合 color = clamp(color, 0.0, 1.0); gl_FragColor = texture2D(CC_Texture0, v_texCoord) * color ;//纹理与灯光混合 }
应用Shader:
将需要传入Shader的变量赋值。
programState->setUniformVec2("u_lightPosition", Vec2(winSize/2)); programState->setUniformVec4("u_lightColor", Vec4(1.0, 1.0, 1.0, 1.0)); programState->setUniformFloat("u_lightRange", 100.0f);
相关文章推荐
- 我学cocos2d-x (两) 采用Delegate(信托)
- 学习笔记cocos2d-x之元素介绍
- Cocos2d优化内存建议
- Cocos2d各平台支持最大纹理尺寸
- cocos2d-x -3.81+win7+vs2013开发环境创建新的项目
- Cocos2d-x 新手引导
- cocos2d-x-2.2的SimpleAudioEngine::sharedEngine()->playEffect()计划中断bug
- Cocos性能优化工具的开发介绍Visual Studio内存泄漏检测工具——Visual Leak Detector
- 学习笔记cocos2d-x之项目分析
- cocos2d-x:学习笔记-01
- cocos2dx-3.2(35) ClippingNode 遮罩
- cocos2d随机数
- libpomelo 增加编译静态库cocos2d-x xcode 工程
- [Cocos2d-x][Cocos小技巧][1][触摸屏蔽]
- 读书笔记cocos2d-x之概念介绍
- 读书笔记cocos2d-x之新建cocos2d工程
- cocosjs修改资源后无法读取
- 拇指接龙游戏升级记录01(CocoStudio 1.4.0.1+Cocos2d-x 2.2.3=>Cocos Studio 2.3.2+Cocos2d-x 3.8.1)
- cocos2d-js注意问题
- cocos2d-js如何在android平台上使用js直接调用Java方法