如图,黑色部分运算后,得到一个背景透明的背包,这是如何实现的呢?
网上看了gl混合模式的说明,但是看不懂,求大神指点.

如图,黑色部分运算后,得到一个背景透明的背包,这是如何实现的呢?
网上看了gl混合模式的说明,但是看不懂,求大神指点.

比较简单的方法都是用setBlendFunc来实现的, 但是对于刀塔传奇确不合适,因为他用的是灰度图,所以要在加载图片的时候根据mask的灰度图设置alpha通道,可能glxxx函数能解决,但我也不太懂,呵呵
自己写个GLSL 不是很容易实现吗?
伪代码
vec4 pixelColor = texture2D(s_texture, v_texCoord)
if(颜色 不是 黑色)
{
pixelcolor.a = 0.0;//其实这里可以做很多东西。看个人需求。
}
本人新手,对cocos2d-x的使用还没有这么熟练,可否麻烦大神贴出代码? 十分感谢
这个得顶上去,想用这种方式节省点资源。。。
同求高手指点迷津!
lz找到好的方法了么
同求 


Texture2D* openImage(const char* jpgFile,const char* maskFile)
{
std::string name = jpgFile;
name.erase(name.length()-4,4);
std::string outname = name + “.png”;
auto ret = Director::getInstance()->getTextureCache()->getTextureForKey(name);
if(ret)
return ret;
auto _img = new Image();
auto _jpg = new Image();
auto _mask = new Image();
do
{
if(!_jpg->initWithImageFile(jpgFile))
break;
if(!_mask->initWithImageFile(maskFile))
break;
auto _color = _jpg->getData();
auto _alpha = _mask->getData();
auto _w = _jpg->getWidth();
auto _h = _jpg->getHeight();
auto _l = _jpg->getDataLen();
auto _out = new unsigned char;
for(int idx = 0; idx < _l ; idx++)
{
_out = _color;
_out = _color;
_out = _color;
_out = _alpha;
}
_img->initWithRawData(_out,_l*4,_w,_h,4);
ret = Director::getInstance()->getTextureCache()->addImage(_img,name);
_img->saveToFile(outname, false);
CC_SAFE_DELETE(_out);
break;
} while (1);
CC_SAFE_DELETE(_img);
CC_SAFE_DELETE(_jpg);
CC_SAFE_DELETE(_mask);
return ret;
}
自己去写shader
8l的解决方法虽然可行
但是我个人觉得不建议这样搞。
因为用cpu 来处理图片资源代价太昂贵了。
大哥!!万分感谢你啊!!

3Q~~~~十分感谢
会写shader的话,就不会来这提问了,对图形和shader这块都不了解
这个需一些opengl的知识
这个效果有什么用
— Begin quote from ____
引用第15楼comrade110于2014-09-01 16:26发表的 :
这个效果有什么用 http://www.cocoachina.com/bbs/job.php?action=topost&tid=216007&pid=1043646
— End quote
省资源,缩小最终发行包的size。 一张半透明的png可以用2张jpg来替换掉,可以省很多!
内存消耗变大很多
大神
一张png图片如何分离成一张jpg和一张mask呢,有没有什么工具可以批量制作呢