quick-cocos2d使用shader上色置灰问题
来源:互联网 发布:dlg分幅数据整合 编辑:程序博客网 时间:2024/06/01 08:50
最近做项目碰到使用shader上色置灰的问题,与大家分享一下:
我们用的是quick-3.5版本+CocosStudio2.3.2,UI布局基本都是用CocosStudio来做的,结果发现直接通过
self:getRootNode():getChildByName("node_layer"):getChildByName("testImageView")设置 shader置灰 完全没效果,但是cc.Sprite:create()出来的精灵使用shader是没问题的,纠结一番结果发现ImageView添加真实的node时通过虚函数CCNode::AddChild(CCNode*,int,int),需要先调换用ccui.ImageView的getVirtualRenderer()获得真实node,再使用shader的置灰方法。
shader.Cutil:setGray(imageView:getVirtualRenderer():getSprite(), true)这样就ok了;
但是坑没有终结,
因为场景上添加的还有scale9属性的imageView发现这个方法又不适用,无奈查阅源码,cocos开源的优势体现出来了,发现scale9sprite已经有现成的方法可以使用了,可以直接
scale9Sprite:getVirtualRenderer():setState(1)
在我觉得everything is ok的时候,发现数字字体位置偏移,又踏一坑。
我们的数字字体都是通过ccui.TextAtlas:create()创建的,网搜了一下发现是前人已经填过的坑
解决方法:
找到shaders/gray.vsh 原目录拷贝一下,重新命名后(我自己重命名为grayMVP.vsh),使用编辑器打开修改
gl_Position = CC_MVPMatrix * a_position;
//CC_PMatrix 为纹理原坐标 CC_MVPMatrix 为变动坐标
再重写一下shader方法
function TestLayer:LableAtlasSetGray(lableAtlas)
local program = cc.GLProgram:create("shaders/grayMVP.vsh", "shaders/gray.fsh")
program:bindAttribLocation(cc.ATTRIBUTE_NAME_POSITION, cc.VERTEX_ATTRIB_POSITION)
program:bindAttribLocation(cc.ATTRIBUTE_NAME_COLOR, cc.VERTEX_ATTRIB_COLOR)
program:bindAttribLocation(cc.ATTRIBUTE_NAME_TEX_COORD, cc.VERTEX_ATTRIB_TEX_COORDS)
program:link()
program:updateUniforms()
lableAtlas:setGLProgram(program)
end
使用的时候
local lableAtlas = ccui.TextAtlas:create("0123456789", "num_fonts_1.png" , 32 , 32, "0")
self:LableAtlasSetGray(lableAtlas:getVirtualRenderer())
字体置灰也解决,大功告成!
我们用的是quick-3.5版本+CocosStudio2.3.2,UI布局基本都是用CocosStudio来做的,结果发现直接通过
self:getRootNode():getChildByName("node_layer"):getChildByName("testImageView")设置 shader置灰 完全没效果,但是cc.Sprite:create()出来的精灵使用shader是没问题的,纠结一番结果发现ImageView添加真实的node时通过虚函数CCNode::AddChild(CCNode*,int,int),需要先调换用ccui.ImageView的getVirtualRenderer()获得真实node,再使用shader的置灰方法。
shader.Cutil:setGray(imageView:getVirtualRenderer():getSprite(), true)这样就ok了;
但是坑没有终结,
因为场景上添加的还有scale9属性的imageView发现这个方法又不适用,无奈查阅源码,cocos开源的优势体现出来了,发现scale9sprite已经有现成的方法可以使用了,可以直接
scale9Sprite:getVirtualRenderer():setState(1)
在我觉得everything is ok的时候,发现数字字体位置偏移,又踏一坑。
我们的数字字体都是通过ccui.TextAtlas:create()创建的,网搜了一下发现是前人已经填过的坑
解决方法:
找到shaders/gray.vsh 原目录拷贝一下,重新命名后(我自己重命名为grayMVP.vsh),使用编辑器打开修改
gl_Position = CC_MVPMatrix * a_position;
//CC_PMatrix 为纹理原坐标 CC_MVPMatrix 为变动坐标
再重写一下shader方法
function TestLayer:LableAtlasSetGray(lableAtlas)
local program = cc.GLProgram:create("shaders/grayMVP.vsh", "shaders/gray.fsh")
program:bindAttribLocation(cc.ATTRIBUTE_NAME_POSITION, cc.VERTEX_ATTRIB_POSITION)
program:bindAttribLocation(cc.ATTRIBUTE_NAME_COLOR, cc.VERTEX_ATTRIB_COLOR)
program:bindAttribLocation(cc.ATTRIBUTE_NAME_TEX_COORD, cc.VERTEX_ATTRIB_TEX_COORDS)
program:link()
program:updateUniforms()
lableAtlas:setGLProgram(program)
end
使用的时候
local lableAtlas = ccui.TextAtlas:create("0123456789", "num_fonts_1.png" , 32 , 32, "0")
self:LableAtlasSetGray(lableAtlas:getVirtualRenderer())
字体置灰也解决,大功告成!
1 0
- quick-cocos2d使用shader上色置灰问题
- Cocos2d-lua 初识shader之一:置灰
- Cocos2d-x使用CCGLProgram和Shader文件实现精灵置灰
- cocos2d-x 使用Shader让精灵变灰
- unity3D 涂涂乐使用shader实现上色效果
- opengl shader 图片变灰及还原,使用自己的shader崩溃问题
- 使用shader实现UI按钮置灰的操作
- Unity3D shader置灰代码
- Cocos2D-X shader(五) cocostudio导出界面置灰及复原lua实现版
- Unity3D使用shader实现灰图
- Cocos2dx 使用Shader使精灵变灰
- cocos2d-x,Shader的用法:精灵变灰
- cocos2d 3.X Shader 变暗和变灰
- Cocos2d-x 3.x Shader变暗和变灰
- cocos2d-x 2.x CCScale9Sprite shader渲染变灰方法
- quick-cocos2d-x 使用CCScrollView的问题及解决方法
- cocos2d lua使用 shader
- 【cocos2d】使用 shader
- leetcode 171 Excel Sheet Column Number
- 易生活(七)-APP--搜索业务逻辑处理
- 快速排序的java实现
- WPF中应用toolkit Chart控件安装
- PHP class 实践
- quick-cocos2d使用shader上色置灰问题
- 长见识了——text-align和margin:0 auto的作用对象及它们的不同
- 331. Verify Preorder Serialization of a Binary Tree
- openwrt 添加web界面
- Java内部类详解
- 树莓派移动网络连接(配置4G网卡)
- Java 中equals 与 == 的 区别
- 【JAVA】九 TreeMap
- Java线程池newSingleThreadExecutor newFixedThreadPool newCachedThreadPool newScheduledThreadPool