如何对动画Armature变成灰色 shader使用
4个回答
2016-01-29 · 知道合伙人教育行家
关注
展开全部
1、用push2Draw(Node* node); 方法将待绘制的节点添加到sRenderChild中等待处理。
2、参考 RenderTexture 的实现,也利用 begin,end将需要绘制的节点利用visit访问添加到当前的 RenderShader 类所在的render层中进行绘制。
3、在实际绘制过程中调用的 onBegin 中缓存对应的坐标系,同时绑定并创建的FBO使得visit进来的节点可以 绘制到当前FBO 中。然后在 onEnd 中调用 render方法 将我们的FBO内容 绘制 原来cocos2dx底层的FBO上。
4、在 render() 实现如何绘制当前FBO的内容到cocos2dx的FBO上。(实际shader作业的地方)
2、参考 RenderTexture 的实现,也利用 begin,end将需要绘制的节点利用visit访问添加到当前的 RenderShader 类所在的render层中进行绘制。
3、在实际绘制过程中调用的 onBegin 中缓存对应的坐标系,同时绑定并创建的FBO使得visit进来的节点可以 绘制到当前FBO 中。然后在 onEnd 中调用 render方法 将我们的FBO内容 绘制 原来cocos2dx底层的FBO上。
4、在 render() 实现如何绘制当前FBO的内容到cocos2dx的FBO上。(实际shader作业的地方)
展开全部
bone:getDisplayRenderNode()是指骨骼当前的图片,但是有的骨骼在不同的动作中可能不是同一图片,需要改用bone->getDisplayManager()->getDecorativeDisplayList();
但是lua里这个接口取出来是空的,所以我直接试了C++的接口代码如下(但是最终效果还是有点问题,有些帧会重叠,我也查不出问题在哪里了,如果你能完美解决请务必告诉我)
cocostudio::Bone * bone=(cocostudio::Bone *)tolua_tousertype(L,1,0);
int state = lua_tointeger(L,2);
GLProgramState *glState = getGLstate(state);
if (glState)
{
auto ls=bone->getDisplayManager()->getDecorativeDisplayList();
for (int i=0;i<ls.size();i++)
{
auto e=ls.at(i);
auto disnode=e->getDisplay();
if (disnode)
{
disnode->setGLProgramState(glState);
}
}
return 1;
}
return 0;
但是lua里这个接口取出来是空的,所以我直接试了C++的接口代码如下(但是最终效果还是有点问题,有些帧会重叠,我也查不出问题在哪里了,如果你能完美解决请务必告诉我)
cocostudio::Bone * bone=(cocostudio::Bone *)tolua_tousertype(L,1,0);
int state = lua_tointeger(L,2);
GLProgramState *glState = getGLstate(state);
if (glState)
{
auto ls=bone->getDisplayManager()->getDecorativeDisplayList();
for (int i=0;i<ls.size();i++)
{
auto e=ls.at(i);
auto disnode=e->getDisplay();
if (disnode)
{
disnode->setGLProgramState(glState);
}
}
return 1;
}
return 0;
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2016-01-08 · 知道合伙人软件行家
关注
展开全部
bone:getDisplayRenderNode()是指骨骼当前的图片,但是有的骨骼在不同的动作中可能不是同一图片,需要改用bone->getDisplayManager()->getDecorativeDisplayList();
但是lua里这个接口取出来是空的,所以我直接试了C++的接口代码如下(但是最终效果还是有点问题,有些帧会重叠,我也查不出问题在哪里了,如果你能完美解决请务必告诉我)
cocostudio::Bone * bone=(cocostudio::Bone *)tolua_tousertype(L,1,0);
int state = lua_tointeger(L,2);
GLProgramState *glState = getGLstate(state);
if (glState)
{
auto ls=bone->getDisplayManager()->getDecorativeDisplayList();
for (int i=0;i<ls.size();i++)
{
auto e=ls.at(i);
auto disnode=e->getDisplay();
if (disnode)
{
disnode->setGLProgramState(glState);
}
}
return 1;
}
return 0;
但是lua里这个接口取出来是空的,所以我直接试了C++的接口代码如下(但是最终效果还是有点问题,有些帧会重叠,我也查不出问题在哪里了,如果你能完美解决请务必告诉我)
cocostudio::Bone * bone=(cocostudio::Bone *)tolua_tousertype(L,1,0);
int state = lua_tointeger(L,2);
GLProgramState *glState = getGLstate(state);
if (glState)
{
auto ls=bone->getDisplayManager()->getDecorativeDisplayList();
for (int i=0;i<ls.size();i++)
{
auto e=ls.at(i);
auto disnode=e->getDisplay();
if (disnode)
{
disnode->setGLProgramState(glState);
}
}
return 1;
}
return 0;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
bone:getDisplayRenderNode()是指骨骼当前的图片,但是有的骨骼在不同的动作中可能不是同一图片,需要改用bone->getDisplayManager()->getDecorativeDisplayList();
但是lua里这个接口取出来是空的,所以我直接试了C++的接口代码如下(但是最终效果还是有点问题,有些帧会重叠,我也查不出问题在哪里了,如果你能完美解决请务必告诉我)
1.cocostudio::Bone * bone=(cocostudio::Bone *)tolua_tousertype(L,1,0);
int state = lua_tointeger(L,2);
2. GLProgramState *glState = getGLstate(state);
if (glState)
{
3. auto ls=bone->getDisplayManager()->getDecorativeDisplayList();
for (int i=0;i<ls.size();i++)
{
4. auto e=ls.at(i);
auto disnode=e->getDisplay();
if (disnode)
{
5. disnode->setGLProgramState(glState);
}
}
6. return 1;
}
7. return 0;
但是lua里这个接口取出来是空的,所以我直接试了C++的接口代码如下(但是最终效果还是有点问题,有些帧会重叠,我也查不出问题在哪里了,如果你能完美解决请务必告诉我)
1.cocostudio::Bone * bone=(cocostudio::Bone *)tolua_tousertype(L,1,0);
int state = lua_tointeger(L,2);
2. GLProgramState *glState = getGLstate(state);
if (glState)
{
3. auto ls=bone->getDisplayManager()->getDecorativeDisplayList();
for (int i=0;i<ls.size();i++)
{
4. auto e=ls.at(i);
auto disnode=e->getDisplay();
if (disnode)
{
5. disnode->setGLProgramState(glState);
}
}
6. return 1;
}
7. return 0;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询