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。创建精灵后,您可能需要首先调用它。