快速记录一下cocos2dx 3.x 全屏幕 blur 效果实现相关代码
来源:互联网 发布:sql存储过程定义变量 编辑:程序博客网 时间:2024/06/15 06:57
1. render texture 相关lua代码:
function TestButtonMediator:getBlurRenderTexture() -- body logTimeBegin("getBlurRenderTexture") local size = cc.Director:getInstance():getWinSize() local rendTexture = cc.RenderTexture:create(size.width, size.height,3,35056) -- #define GL_DEPTH24_STENCIL8 0x88F0 (35056) rendTexture:setAnchorPoint(cc.p(0,0)) rendTexture:setPosition(size.width/2,size.height/2) rendTexture:begin() CCDirector:sharedDirector():getRunningScene():visit(); rendTexture:endToLua(false) local spr =BlurShader:create(rendTexture:getSprite()) spr:setBlurRadius(3) spr:setSampleNum(3) spr:getTexture():setAntiAliasTexParameters() -- local colorView = ccui.Layout:create(); -- colorView:setContentSize(size) -- colorView:setBackGroundColor(cc.c3b(0, 0, 0)) -- colorView:setBackGroundColorType(1) -- colorView:setBackGroundColorOpacity(250) -- colorView:setAnchorPoint(cc.p(0,0)) -- colorView:setPosition(0,0) -- rendTexture:addChild(colorView) logTimeEnd("getBlurRenderTexture") return rendTexture,sprend
把 render texture 加到 node 上
local rendTexture,spr = self:getBlurRenderTexture() self:getView():addChild(rendTexture)
2. shader 相关代码
vs ccShader_PositionTextureColor_noMVP.vert
attribute vec4 a_position;attribute vec2 a_texCoord;attribute vec4 a_color;#ifdef GL_ESvarying lowp vec4 v_fragmentColor;varying mediump vec2 v_texCoord;#elsevarying vec4 v_fragmentColor;varying vec2 v_texCoord;#endifvoid main(){ gl_Position = CC_PMatrix * a_position; v_fragmentColor = a_color; v_texCoord = a_texCoord;}
fs: example_Blur.fsh
#ifdef GL_ESprecision mediump float;#endifvarying vec4 v_fragmentColor;varying vec2 v_texCoord;uniform float blurRadius;uniform float sampleNum;uniform float test;uniform vec2 resolution;vec4 blur(vec2);void main(void){ vec4 col = blur(v_texCoord); //* v_fragmentColor.rgb; gl_FragColor = vec4(col) * v_fragmentColor;}vec4 blur(vec2 p){ //sampleNum = 2.0; //blurRadius = 3.5; if (blurRadius > 0.0 && sampleNum > 1.0) { vec4 col = vec4(0); vec4 colaphale = vec4(0); vec2 unit = 1.0 / resolution.xy; float r = blurRadius; float sampleStep = r / sampleNum; float count = 0.0; for(float x = -r; x < r; x += sampleStep) { for(float y = -r; y < r; y += sampleStep) { float weight = (r - abs(x)) * (r - abs(y)); col += texture2D(CC_Texture0, p + vec2(x * unit.x, y * unit.y)) * weight; count += weight; #ifdef USE_ETC colaphale += texture2D(CC_Texture1, p + vec2(x * unit.x, y * unit.y)) * weight; #endif } } #ifdef USE_ETC col.a = colaphale.r; #endif return col / count; } vec4 texColor = texture2D(CC_Texture0, p); #ifdef USE_ETC texColor = FormatEtc(texColor); #endif return texColor;}
3. shader lua 交互相关代码
BlurShader = {}function BlurShader:create(sprite) local shader = SpriteShader:create("BlurShader",sprite:isEtc()) shaderState = sprite:setLuaGLProgram(shader) sprite.setResolution = function (self,width,height) shaderState:setUniformVec2("resolution", cc.p(width,height)) end sprite.setBlurRadius = function (self,radius) shaderState:setUniformFloat("blurRadius", radius) end sprite.setSampleNum = function (self,sampleNum) shaderState:setUniformFloat("sampleNum",sampleNum) end self:setDefaultValue(sprite) return spriteend
0 0
- 快速记录一下cocos2dx 3.x 全屏幕 blur 效果实现相关代码
- cocos2dx 3.x版本 技能冷却效果的实现
- COCOS2DX 3.X 相关命令
- filter:blur() 实现毛玻璃效果
- cocos2dx 触摸相关记录
- cocos2dx 3.x HelloWorld的代码认识
- 测试一下代码效果.
- cocos2dx三行代码实现拖动/鼠标跟随效果
- Cocos2dx 流星效果实现
- jquery实现全屏幕遮罩,代码精简,兼容性好
- 记录一下代码片段
- 全屏幕显示代码
- wpf 实现实时毛玻璃(live blur)效果
- cocos2dx GL 效果工具代码
- cocos2dx-2.x CCString代码
- Cocos2dx IOS平台相关代码
- android模糊效果blur
- android Blur模糊效果
- Flutter基础—你好,Flutter!
- Linux下配置JDK
- MyBatis新增时的序列主键
- leetcode---Third Maximum Number
- dubbo进阶--管控台
- 快速记录一下cocos2dx 3.x 全屏幕 blur 效果实现相关代码
- NYOJ--353--bfs+优先队列--3D dungeon
- linux进程通信之信号
- Python学习笔记(1)递归函数
- cannot import caffe
- 图像处理中的一阶偏导数和二阶偏导数
- Python 如何打开.pkl文件
- python安装及入门学习
- React 入门实例教程