【问题标题】:OpenGL: How to darken a sprite in Cocos2dOpenGL:如何在 Cocos2d 中使精灵变暗
【发布时间】:2014-09-27 07:51:12
【问题描述】:

我已经尝试使用所有 GL 功能拍摄黑暗,但我确信必须非常简单,但无济于事。我是新手。

我想取一个精灵并将其变暗。我对此的想法是加载精灵,在其上方添加一个灰色层(使用带有灰色的 CCLayerColor),应用某种 GL 函数,然后获取输出并将其显示在屏幕上。然而,在我尝试的每一个变体中,我的源图像都正确变暗了,它周围的透明度也受到了影响,显示为灰色。我需要将变暗效果掩盖为源精灵的形状。

这是我到目前为止的代码。如何正确掩盖变暗效果?

CCSprite* sprite = [CCSprite spriteWithSpriteFrameName: mod.backgroundImagePath];
CCLayerColor* tint = [CCLayerColor node];
[tint setColor:ccc3(205, 205, 205)];
//[tint setBlendFunc: (ccBlendFunc){GL_SRC_COLOR, GL_ONE_MINUS_DST_ALPHA}];  Need help here?
[sprite addChild:tint];

CCRenderTexture* rt = [CCRenderTexture renderTextureWithWidth:sprite.boundingBox.size.width height:sprite.boundingBox.size.height];
[rt begin];
[sprite visit];
[rt end];

【问题讨论】:

    标签: opengl-es cocos2d-iphone


    【解决方案1】:

    您可以只设置CCSpritecolor 属性(继承自CCNode):

    CCSprite* sprite = [CCSprite spriteWithSpriteFrameName:@"foobar"];
    
    sprite.color = [CCColor colorWithRed:r green:g blue:b alpha:a];
    

    r,g,b,a 变量是您要使用的颜色,在 0 和 1 之间标准化。

    即: 设置为0,0,0,1 将使对象完全变黑。

    【讨论】:

    • 这么简单让我很痛苦。您是否有机会解释为什么将颜色应用于精灵的纹理作为您答案的一部分?
    • @GregoryJohnson 那么,它是否按您的预期工作? color 参数是使用底层 OpenGL 着色器中的纹理颜色调制的颜色。如果您查看源代码,在 GLSL 着色器中的某处会有一行代码,它们会执行以下操作:texture2D(CC_texture) * color;
    • 是的,它完全按预期工作。这很痛苦,因为当它只是一行代码时,我花了太长时间玩 GL 的东西。感谢您提供额外的详细信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多