zoukankan      html  css  js  c++  java
  • cocos2d-x 调色

    在游戏开发。我们须要实现闪光的灯。照明弹效果等等,我么你能够採用混合模式来实现。

    假设学习过OpenGL(ES),就知道里面使用glBlendFunc函数实现的。在cocos2d-x里肯定也有,对于精灵。能够使用mySprite->setBlendFunc()来现。


    什么是颜色混合?

    简单来说就是将RGBA中的A,经行操作处理。详细一点。就是把某一像素位置原来的颜色和将要画上去的颜色,通过某种方式混在一起,从而实现特殊的效果。

    OpenGL 会把源颜色和目标颜色各自取出,并乘以一个系数(源颜色乘以的系数称为“源因子”。目标颜色乘以的系数称为“目标因子”),然后相加。这样就得到了新的颜 色。

    (也能够不是相加,新版本号的OpenGL能够设置运算方式,包含加、减、取两者中较大的、取两者中较小的、逻辑运算等,但我们这里为了简单起见,不讨 论这个了)
    如果源颜色的四个分量(指红色。绿色。蓝色,alpha值)是(Rs, Gs, Bs,  As),目标颜色的四个分量是(Rd, Gd, Bd, Ad)。又设源因子为(Sr, Sg, Sb, Sa),目标因子为(Dr, Dg, Db,  Da)。

    则混合产生的新颜色能够表示为:

    (Rs*Sr+Rd*Dr, Gs*Sg+Gd*Dg, Bs*Sb+Bd*Db, As*Sa+Ad*Da)

    glBlendFunc有两个參数,前者表示源因子,后者表示目标因子。这两个參数能够是多种值,以下介绍比較经常使用的几种。
    GL_ZERO:     表示使用0.0作为因子,实际上相当于不使用这样的颜色參与混合运算。
    GL_ONE:      表示使用1.0作为因子。实际上相当于全然的使用了这样的颜色參与混合运算。
    GL_SRC_ALPHA:表示使用源颜色的alpha值来作为因子。
    GL_DST_ALPHA:表示使用目标颜色的alpha值来作为因子。
    GL_ONE_MINUS_SRC_ALPHA:表示用1.0减去源颜色的alpha值来作为因子。
    GL_ONE_MINUS_DST_ALPHA:表示用1.0减去目标颜色的alpha值来作为因子。



    以下举一个样例:

    1. ////////////////////////////  
    2. // background  
    3. CCSprite *helloSprite = CCSprite::create("man.png");  
    4. helloSprite->setPosition(ccp(winSize.width/2, winSize.height/2));  
    5. this->addChild(helloSprite);  
    6.   
    7. ////////////////////////////  
    8. // add your sprite  
    9. CCSprite *lightSprite = CCSprite::create("light.png");  
    10. lightSprite->setColor(ccWHITE);  
    11. lightSprite->setScale(4.0f);  
    12. lightSprite->setPosition(ccp(winSize.width/2, winSize.height/2+40));  
    13. ccBlendFunc cbl = {GL_DST_COLOR, GL_ONE};  
    14. lightSprite->setBlendFunc(cbl);  
    15. this->addChild(lightSprite, 2);  
    用到的light.png:-><-(透明的)

    看到,这个小人的光光头有种被点亮的感觉

    使用混色,加动画,你可以实现一些非常酷的效果。

  • 相关阅读:
    4.22日日常记录
    ajax再接触
    一些小姿势
    打星功能
    悟透javascript读书笔记
    初接触eclipse和前后端调试问题 待续
    python实现后台员工管理系统
    python实现增删改查操作
    python实现6种方法打印九九乘法表
    python实现猜数字游戏
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4886862.html
Copyright © 2011-2022 走看看