2012-01-05 97 views
3

使用setBlendFunc可以使CCSprite变成黑白的一种吗?如果是,请告诉如何去做。如何使用setBlendFunc将CCSprite转换为黑白/灰色

更多详细信息:

我必须让我的游戏精灵(背景字符)到灰色salce /黑色和白色的某一时间点。我不想为此拍摄其他图像。我试过CCTexture2DMutable。但事情是需要额外的记忆相同的精灵。

有什么办法可以使用一个蒙版图像,并使所有精灵灰度。 请帮忙。

回答

2

这不是数学上正确灰度化,但看起来黑色&白:

// setup grayscaling: 
GLfloat rgba[4] = { 0.65f, 0.65f, 0.65f, 1.0f }; 
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE); 
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_DOT3_RGB); 
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, rgba); 
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_CONSTANT); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR); 
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_TEXTURE); 
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR); 
// ... glDrawArrays() here ... 
// turn off grayscaling: 
glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 

插入此代码到CCSprite绘制方法。 0.65frgba的值是通过实验设定的,试着调整它。

+0

这是我想要的几乎一个,我试着用default.png(cocos2d imgae),但是在一些地方它显示了一些不是原来的黑色。 – rat 2012-01-20 13:51:28

+0

黑色是由dot3组合模式的特殊公式引起的:'result.rgb = 4 *(((r0-0.5)*(r1-0.5))+((g0-0.5)*(g1-0.5))+( (b0-0.5)*(b1-0.5)))'。您可以通过设置先前的环境来为处理颜色添加一些价值,但它会将您的颜色限制为白色,并且我无法使其工作。 – brigadir 2012-01-20 16:21:47

+0

感谢您的回复。 – rat 2012-01-21 04:53:19

1

不可能通过setBlendFunc这样做,但可以使用CCMutableTexture完成。如果这是一个可行的选择,我会发布所需的代码来这样做。

+0

感谢您的回复。我已经尝试过CCMutableTexture。我想减少内存使用量。是否有任何使用单个蒙版精灵,并使所有图像黑白灰度。请原谅我,如果我问什么愚蠢的。 – rat 2012-01-13 10:38:19

相关问题