是否可以从CCTMXTiledMap的CCsprite中运行shader(CCGLProgram) ?



我不能在来自CCTMXTiledMap的CCSprite上运行着色器。在互联网上进行了大量的研究之后,我开始认为这可能是不可能的,但我没有看到任何关于它的文档或示例…有人这样做过吗?如果可以的话,你能告诉我我做错了什么吗?

这里是CCTMXTiledMap创建的代码:(我没有任何问题,我的CCTMXTiledMap的所有精灵都正确显示)

CCTMXTiledMap *tileMap = [CCTMXTiledMap tiledMapWithTMXFile:@"FogTMX.tmx"];
[self addChild:tileMap z:2 tag:666];
下面是我为CCSprite启动着色器的代码:
CCTMXLayer *layer = [tileMap layerNamed:@"Layer 0"];
CCSprite *tile = [layer tileAt:ccp(10,10)];
const GLchar * fragmentSource = (GLchar*) [[NSString stringWithContentsOfFile:[[CCFileUtils sharedFileUtils] fullPathFromRelativePath:@"CSEAlpha.fsh"] encoding:NSUTF8StringEncoding error:nil] UTF8String];
tile.shaderProgram = [[CCGLProgram alloc] initWithVertexShaderByteArray:ccPositionTextureA8Color_vert fragmentShaderByteArray:fragmentSource];
[tile.shaderProgram addAttribute:kCCAttributeNamePosition index:kCCVertexAttrib_Position];
[tile.shaderProgram addAttribute:kCCAttributeNameTexCoord index:kCCVertexAttrib_TexCoords];
[tile.shaderProgram link];
[tile.shaderProgram updateUniforms];
[tile.shaderProgram use];
  • 我没有任何问题来改变CCSprite"tile"的属性(来自CCTMXLayer)。例如:[tile setColor:ccc3(100,100,100)];)
  • 我可以为CCSprite *normalSprite = [CCSprite spriteWithFile:@"Fog.png"];创建的"正常"精灵启动着色器(CCGLProgram)
  • 我尝试了cocos2d v2.0.0和cocos2d v2.1.rc2

谢谢你的帮助

"CCTMXLayer使用CCSpriteBatchNode进行渲染,你可以改变这个节点的着色器,但是它将适用于所有的贴图,因为它们使用相同的纹理。

当CCSpriteBatchNode的一部分时,我不认为目前有功能可以修改每个CCSprite的着色器。"

Thanks to cocojoe from: http://www.cocos2d-iphone.org

最新更新