0

这是我的代码的样子

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)) 所以应该是一样的。

不知道为什么我在这里做错了,有人可以帮助我吗?

问候,

4

2 回答 2

1
[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是一本了解 iPhone 上 OpenGL ES 的好书。

于 2011-03-01T13:29:07.907 回答
0

根据文档:

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

Blending 函数属性属于 CCSpriteSheet,因此不能单独设置 blending 函数属性。

您似乎将其应用于精灵而不是工作表。尝试将混合应用于工作表。

于 2010-10-15T01:55:14.790 回答