cocos2d-iphone setBlendFunc()

Вот как выглядит мой код

CCSprite *sp = [CCSprite spriteWithFile:@"textureWithOneColorbackground.jpg"];

[self addChild:sp];

// Change the blending factors
[sp setBlendFunc:(ccBlendFunc){GL_ONE, GL_ONE}];
[sp setColor:ccBLACK];

Исходный цвет текстуры: (246,149,32). Теперь результат (0, 0, 0)

Согласно OpenGL, расчет должен быть таким: ((246 * 1 + 0 * 1), (149 * 1 + 0 * 1), (32 * 1 + 0 * 1)), поэтому он должен быть таким же.

Не знаю, почему я здесь не так, может кто-нибудь мне помочь?

С Уважением,

2 ответа

Решение
[sp setBlendFunc:(ccBlendFunc){GL_ONE, GL_ONE}];

setBlendFunc устанавливает glBlendFunc. исходный смешивающий фактор и целевой смешивающий фактор.

[sp setColor:ccBLACK];

setColor не означает, что он предназначен для смешивания цветов назначения. Это означает установить цвет для цвета вершины.

Вы устанавливаете черный (R=0,G=0,B=0,A=1) для цвета вершины, и если цвет фона черный,

(([Цвет текстуры]246 * [Цвет вершины](0 / 255) * [GL_ONE]1 + [Цвет фона] 0 * [GL_ONE] 1), (149 * (0/255) * 1 + 0 * 1), (32 * (0/255) * 1 + 0 * 1)) = (0, 0, 0)

iPhone 3D Programming - хорошая книга для понимания OpenGL ES на iPhone.

Согласно документам:

http://www.cocos2d-iphone.org/api-ref/0.99.0/interface_c_c_sprite.html

Свойство функции смешивания принадлежит CCSpriteSheet, поэтому вы не можете индивидуально установить свойство функции смешивания.

Вы, кажется, применяете это к спрайту, а не к листу. Попробуйте применить смесь к листу.

Другие вопросы по тегам