Opengl es OpenGL:如何在Cocos2d中使精灵变暗

Opengl es OpenGL:如何在Cocos2d中使精灵变暗,opengl-es,cocos2d-iphone,Opengl Es,Cocos2d Iphone,我尝试过用所有的GL函数拍摄黑暗,但我确信这是非常简单的。我是新手 我想拿一个雪碧,把它调暗。我的想法是加载sprite,在上面添加一个灰色层(使用带有灰色的CCLayerColor),应用某种GL函数,然后获取输出并在屏幕上显示。然而,在我尝试的每一种变体中,我的源图像都正确地变暗了,周围的透明度也受到了影响,显示为灰色。我需要将变暗效果掩盖为源精灵的形状 这是我到目前为止的代码。我如何才能正确地遮罩变暗效果 CCSprite* sprite = [CCSprite spriteWithSpr

我尝试过用所有的GL函数拍摄黑暗,但我确信这是非常简单的。我是新手

我想拿一个雪碧,把它调暗。我的想法是加载sprite,在上面添加一个灰色层(使用带有灰色的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];
您只需设置
CCSprite
(从
CCNode
继承)的属性即可:

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

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

您只需设置
CCSprite
的属性(该属性继承自
CCNode
):

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

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

您只需设置
CCSprite
的属性(该属性继承自
CCNode
):

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

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

您只需设置
CCSprite
的属性(该属性继承自
CCNode
):

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

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

这么简单让我很痛苦。你有没有可能解释一下,为什么在你的答案中对精灵的纹理应用颜色是有效的?@GregoryJohnson,它是否如你所料有效?
color
参数是使用参考底图OpenGL着色器中的纹理颜色进行调制的颜色。如果查看源代码,GLSL着色器中的某个地方会有一行代码,它们会执行类似的操作:
texture2D(CC_texture)*color
;是的,它完全按照预期工作。这是痛苦的,因为我花了太长时间玩GL的东西,而它只是一行代码。谢谢你提供的额外细节。这么简单让我很痛苦。你有没有可能解释一下,为什么在你的答案中对精灵的纹理应用颜色是有效的?@GregoryJohnson,它是否如你所料有效?
color
参数是使用参考底图OpenGL着色器中的纹理颜色进行调制的颜色。如果查看源代码,GLSL着色器中的某个地方会有一行代码,它们会执行类似的操作:
texture2D(CC_texture)*color
;是的,它完全按照预期工作。这是痛苦的,因为我花了太长时间玩GL的东西,而它只是一行代码。谢谢你提供的额外细节。这么简单让我很痛苦。你有没有可能解释一下,为什么在你的答案中对精灵的纹理应用颜色是有效的?@GregoryJohnson,它是否如你所料有效?
color
参数是使用参考底图OpenGL着色器中的纹理颜色进行调制的颜色。如果查看源代码,GLSL着色器中的某个地方会有一行代码,它们会执行类似的操作:
texture2D(CC_texture)*color
;是的,它完全按照预期工作。这是痛苦的,因为我花了太长时间玩GL的东西,而它只是一行代码。谢谢你提供的额外细节。这么简单让我很痛苦。你有没有可能解释一下,为什么在你的答案中对精灵的纹理应用颜色是有效的?@GregoryJohnson,它是否如你所料有效?
color
参数是使用参考底图OpenGL着色器中的纹理颜色进行调制的颜色。如果查看源代码,GLSL着色器中的某个地方会有一行代码,它们会执行类似的操作:
texture2D(CC_texture)*color
;是的,它完全按照预期工作。这是痛苦的,因为我花了太长时间玩GL的东西,而它只是一行代码。谢谢你提供的额外细节。
CCSprite* sprite = [CCSprite spriteWithSpriteFrameName:@"foobar"];

sprite.color = [CCColor colorWithRed:r green:g blue:b alpha:a];