Как конвертировать CCSprite в черно-белый / серый, используя setBlendFunc - PullRequest
3 голосов
/ 05 января 2012

Можно ли сделать CCSprite черно-белым с помощью setBlendFunc?Если да, пожалуйста, расскажите, как это сделать.

Подробнее:

Мне нужно сделать свой игровой спрайт (фон, персонаж) серым оттенком / черно-белым на определенный момент времени.Я не хочу брать другое изображение для этого.Я пробовал CCTexture2DMutable.Но дело в том, что требуется дополнительная память того же спрайта.

Есть ли способ использовать одно изображение маски и сделать все спрайты серыми.Пожалуйста, помогите.

Ответы [ 2 ]

2 голосов
/ 19 января 2012

Это не является математически корректным оттенком серого, но выглядит черно-белым:

// 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 установлено экспериментально, попробуйте настроить его.

1 голос
/ 12 января 2012

Это невозможно сделать с помощью setBlendFunc, однако это можно сделать с помощью CCMutableTexture. Если это приемлемая альтернатива, я опубликую необходимый код для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...