Opengl es cocos2d iphone setBlendFunc()

Opengl es cocos2d iphone setBlendFunc(),opengl-es,cocos2d-iphone,blending,Opengl Es,Cocos2d Iphone,Blending,下面是我的代码 CCSprite *sp = [CCSprite spriteWithFile:@"textureWithOneColorbackground.jpg"]; [self addChild:sp]; // Change the blending factors [sp setBlendFunc:(ccBlendFunc){GL_ONE, GL_ONE}]; [sp setColor:ccBLACK]; 原始纹理颜色为(246149,32) 现在的结果是(0,0,0) 根据Op

下面是我的代码

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

[self addChild:sp];

// Change the blending factors
[sp setBlendFunc:(ccBlendFunc){GL_ONE, GL_ONE}];
[sp setColor:ccBLACK];
原始纹理颜色为(246149,32) 现在的结果是(0,0,0)

根据OpenGL,计算应如下所示: ((246 * 1 + 0 * 1), (149 * 1 + 0 * 1), (32 * 1 + 0 * 1)) 所以应该是一样的

不知道我为什么在这里做错了,有人能帮我吗

关于,

根据文件:

混合函数属性属于 到CcspiteSheet,所以您不能 单独设置混合功能 财产

你似乎把它应用到雪碧而不是床单上。尝试将混合应用于板材

[sp setBlendFunc:(ccBlendFunc){GL_ONE, GL_ONE}];
setBlendFunc集合。源混合因子和目标混合因子

[sp setColor:ccBLACK];
setColor并不意味着它用于目标混合颜色。它意味着为顶点颜色设置颜色

将顶点颜色设置为黑色(R=0,G=0,B=0,A=1),如果背景颜色为黑色

(([texture color]246*[vertex color](0/255)*[GL_ONE]1+[background color]0*[GL_ONE]1)、(149*(0/255)*1+0*1)、(32*(0/255)*1+0*1))=(0,0,0)


是一本了解iPhone上OpenGL ES的好书。

从我的代码中可以看到,sprite图像是从文件加载的,因此这意味着它没有使用spritesheet。如果再往下看,文档会说“如果父节点是标准的CCNode,则CCSprite的行为与任何其他CCNode一样:它支持混合功能。它支持锯齿/抗锯齿,但渲染速度较慢”。此外,spritesheet混合意味着一次混合将影响整个图纸,因为它只有一个纹理。混合仍然有效,只是对整个工作表,而不是单个精灵。(我应该学会阅读。)有一种方法-(void)useSelfRender。创建精灵后,您可能需要首先调用它。