使用setBlendFunc可以使CCSprite变成黑白的一种吗?如果是,请告诉如何去做。如何使用setBlendFunc将CCSprite转换为黑白/灰色
更多详细信息:
我必须让我的游戏精灵(背景字符)到灰色salce /黑色和白色的某一时间点。我不想为此拍摄其他图像。我试过CCTexture2DMutable。但事情是需要额外的记忆相同的精灵。
有什么办法可以使用一个蒙版图像,并使所有精灵灰度。 请帮忙。
使用setBlendFunc可以使CCSprite变成黑白的一种吗?如果是,请告诉如何去做。如何使用setBlendFunc将CCSprite转换为黑白/灰色
更多详细信息:
我必须让我的游戏精灵(背景字符)到灰色salce /黑色和白色的某一时间点。我不想为此拍摄其他图像。我试过CCTexture2DMutable。但事情是需要额外的记忆相同的精灵。
有什么办法可以使用一个蒙版图像,并使所有精灵灰度。 请帮忙。
这不是数学上正确灰度化,但看起来黑色&白:
// 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.65f
rgba
的值是通过实验设定的,试着调整它。
不可能通过setBlendFunc这样做,但可以使用CCMutableTexture完成。如果这是一个可行的选择,我会发布所需的代码来这样做。
感谢您的回复。我已经尝试过CCMutableTexture。我想减少内存使用量。是否有任何使用单个蒙版精灵,并使所有图像黑白灰度。请原谅我,如果我问什么愚蠢的。 – rat 2012-01-13 10:38:19
这是我想要的几乎一个,我试着用default.png(cocos2d imgae),但是在一些地方它显示了一些不是原来的黑色。 – rat 2012-01-20 13:51:28
黑色是由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
感谢您的回复。 – rat 2012-01-21 04:53:19