Sprite可以使用setGLProgram或者setGLProgramState来设置shader
Armature使用上述方法无效
引擎cocos2dx 3.2 lua开发,请问我应该用什么方法才能给Armature添加shader呢?
骨骼动画需要遍历骨骼,并取出renderNode,然后设置setGLProgramState。
local p = createGrayShader()
local bones = armature:getBoneDic()
for key, var in pairs(bones) do
var:getDisplayRenderNode():setGLProgramState§
end
我使用以上代码还是不行,能给个lua的代码吗?
grayArmature:function(armature){
var locBoneDic = armature.getBoneDic();
for (var key in locBoneDic) {
var bone = locBoneDic;
var detector = bone.getColliderDetector();
if (bone && bone.getDisplayRenderNode) {
var node = bone.getDisplayRenderNode();
this.graySprite(node);
}
if(!detector)
continue;
var bodyList = detector.getColliderBodyList();
for (var i = 0; i < bodyList.length; i++) {
var body = bodyList;
}
}
},graySprite:function(sprite)
{
if( ‘opengl’ in cc.sys.capabilities ) {
if(sprite)
{
var shader = new cc.GLProgram();//cc.GLProgram.create(“gray.vsh”, “gray.fsh”);
shader.retain();
shader.init(this.vsh,this.fsh);
shader.addAttribute(cc.ATTRIBUTE_NAME_POSITION, cc.VERTEX_ATTRIB_POSITION);
shader.addAttribute(cc.ATTRIBUTE_NAME_COLOR, cc.VERTEX_ATTRIB_COLOR);
shader.addAttribute(cc.ATTRIBUTE_NAME_TEX_COORD, cc.VERTEX_ATTRIB_TEX_COORDS);
shader.link();
shader.updateUniforms();
sprite.setShaderProgram(shader);
}
}
}
骨骼必须每一个取出来绘制