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, поэтому вы не можете индивидуально установить свойство функции смешивания.
Вы, кажется, применяете это к спрайту, а не к листу. Попробуйте применить смесь к листу.