我在网上找了一些图片素材,比较复杂,而且是有黑色背景的。 然后我用
ccBlendFunc tmp_oBlendFunc = {GL_ONE_MINUS_DST_COLOR, GL_ONE}
这个方式进行混合,混合之后发现黑色背景是不见了,但是图片整体也变的透明了,不知道这个是什么原因,请大神指点一下。
你看到的这个就是类似于PS中间正片叠底或者滤色的效果
这个是OpengGL ES 2.0通过设置混合因子来指定两个片元的加权比例
假设原因子 目标因子,中间的小写字母是下标表示 R,G,B,阿尔法通道]
对于原片元cocos2d::color4F(Rs,Gs,Bs,As) 和目标片元cocos2d::color4F(Rd,Gd,Bd,Ad)
混合后的颜色就是 color4F(RsSr+RdDr,GsSg+GdDg,BsSb+BdDb,AsSa+AdDa);
简单的说,假如你第二章图片(原图片)放置在第一章图片上面(目标图片),对于 红 绿 蓝 透明度 这四个通道中分别把 原图片对应的像素在该通道中的值×原因子 + 目标图片对应的像素在该通道的值×目标因子。
本来这些因子在 OpenGL和中可以自己随便设置的,但cocos2dx使用的是 OpenGL ES 2.0
开发人员不能自己设置,这些值你网上查一下就知道了(Opengl ES 混合效果),类似于GL_ZERO: GL_ONE: GL_DST_COLOR: GL_SRC_COLOR: GL_ONE_MINUS_SRC_COLOR: GL_SRC_ALPHA: 这样的东西
一般情况下你只要记得两组值就够了
1.{ GL_SRC_ALPHA , GL_ONE_MINUS_SRC_ALPHA } 半透明遮挡效果
2.{ GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR:} 滤光镜效果
谢谢,不过我用GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR这个方式去混合,图片还是显得有点透明