2012-01-05 95 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

相關問題