cocos2dx[3.2](15)——颜色混合BlendFunc

2023-05-16

原文:点此


1、概念

    “混合”是指两种颜色的叠加方式。在新图片将要渲染画到屏幕上的时候,将用在新图片中的红、绿、蓝和透明度信息,与屏幕上已经存在的图片颜色信息相融合。

    说的具体一点,就是把某一像素位置上原来的颜色和将要画上去的颜色,通过某种方式混在一起,从而实现特殊的效果。

    新图片颜色被称作“源颜色”,而屏幕上已存在的图片颜色则被称作“目标颜色”

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


2、计算公式

    假设:颜色信息的四个分量(红,绿,蓝,透明度)

        (1)“源颜色”  :(Rs, Gs, Bs, As)

        (2)“目标颜色”:(Rd, Gd, Bd, Ad)

        (3)“源因子”  :(Sr, Sg, Sb, Sa)

        (4)“目标因子”:(Dr, Dg, Db, Da)

    那么混合产生的新颜色可以表示为:

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

    如果颜色的某一分量超过了1.0,则它会被自动截取为1.0,不需要考虑越界的问题。 


3、混合因子

混合方式 解释 因子值
GL_ZERO 全部不用 (0 , 0 , 0 , 0)
GL_ONE 全部使用 (1 , 1 , 1 , 1)
GL_SRC_COLOR 使用源颜色 (Rs , Gs , Bs , As)
GL_DST_COLOR 使用目标颜色 (Rd , Gd , Bd , Ad)
GL_ONE_MINUS_SRC_COLOR 减去源颜色 (1-Rs , 1-Gs , 1-Bs , 1-As)
GL_ONE_MINUS_DST_COLOR 减去目标颜色 (1-Rd , 1-Gd , 1-Bd , 1-Ad)
GL_SRC_ALPHA 使用源颜色的透明度 (As , As , As , As)
GL_DST_ALPHA 使用目标颜色的透明度 (Ad , Ad , Ad , Ad)
GL_ONE_MINUS_SRC_ALPHA 减去源颜色的透明度 (1-As , 1-As , 1-As , 1-As)
GL_ONE_MINUS_DST_ALPHA 减去目标颜色的透明度 (1-Ad , 1-Ad , 1-Ad , 1-Ad)


4、使用方法

    Sprite精灵类中有一个设置混合方式的函数setBlendFunc(BlendFunc),另外混合方式的属性值是以BlendFunc结构体作为数据的,定义方式为:{ '源因子' , '目标因子' }

    混合方式可用于精灵纹理图片颜色信息的混合与叠加。


    4.1、混合方式创建

1
2
3
4
//
     //{ '源因子' , '目标因子' }
     BlendFunc cbl = { GL_SRC_ALPHA , GL_ONE };
//


    4.2、静态常量(常用混合方式)

1
2
3
4
5
6
//
     const  BlendFunc BlendFunc::DISABLE                 = {GL_ONE, GL_ZERO};
     const  BlendFunc BlendFunc::ALPHA_PREMULTIPLIED     = {GL_ONE, GL_ONE_MINUS_SRC_ALPHA};
     const  BlendFunc BlendFunc::ALPHA_NON_PREMULTIPLIED = {GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA};
     const  BlendFunc BlendFunc::ADDITIVE                = {GL_SRC_ALPHA, GL_ONE};
//


    4.3、混合方式举例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//
//目标图片,已存在于屏幕上
     Sprite* sp1 = Sprite::create( "red.jpg" );
     sp1->setPosition(mysize/3);
     this ->addChild(sp1);
 
//源图片,新图片
     Sprite* sp2 = Sprite::create( "green.jpg" );
     sp2->setPosition(mysize/3.0*2.0);
     this ->addChild(sp2);
 
//混合方式,新图片渲染时的混合方式
     //{ 源因子 , 混合因子 }
     BlendFunc cbl = { GL_SRC_ALPHA , GL_ONE };
     sp2->setBlendFunc(cbl);
//


    4.4、如下图所示

wKiom1QEtyCBx1jcAABsFgqcVJg055.jpg


5、混合方式举例

    (1){ GL_ONE , GL_ZERO }

wKioL1QEuTajzwqsAAAomR0Cwdc453.jpg


    (2){ GL_ZERO, GL_ONE }

wKiom1QEuWngO6qrAAAYU-tyrVw791.jpg


    (3){ GL_ONE, GL_ONE }

wKioL1QEufegzzOLAAAsUt4gCjU945.jpg


    (4){ GL_SRC_ALPHA , GL_ONE } (比较常用)

        和上图一样?是因为“源颜色”的透明度为:1。

wKiom1QEuk2Bi8jeAAAsXXQ5FXQ245.jpg


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

cocos2dx[3.2](15)——颜色混合BlendFunc 的相关文章

  • Type cannot use 'try' with exceptions disabled

    cannot use throw with exceptions disabled 在为 DragonBonesCPP refactoring 的 cocos2d x 3 2 demo 增加 Android 编译时 NDK 报了一个编译错误
  • Cocos2d摄像机详解

    Cocos2d摄像机详解 摄像机的作用 在3D系统中都会有一个摄像机的概念 物体在显示之前需要先将物体的坐标转换到视角坐标 也就是摄像机坐标 然后再投影 最后还需对投影画面进行缩放到视口显示的大小 Coscos2d x 3 x支持3D的 所
  • cocos2dx-lua开发旅程(一)

    最近要做一个手游项目 打算用cocos2dx来做 我也是初学者 网上很多书籍和资料都是采用cocos2dx的c 版本来做开发示例的 很少关于cocos2dx和lua怎么结合在实际项目中的教程 这使得我很痛苦 所以我写下这一系列教程 希望跟我
  • Android studio的cMake编译生成.so库并调用

    第一步 添加工具 在SDK Tools中勾选安装CMake LLDB NDK 其中的LLDB是调试本地代码的工具 可以调试C 代码 第二步 创建一个最简单的官方demo File gt New gt NewProject 选中最下方的Inc
  • cocos2d中的anchorPoint

    cocos2d中的anchorPoint 将该图片放置到屏幕左下方 CCSprite sprite CCSprite sprite Default png addChild sprite 生成的精灵放置在 0 0 也就是屏幕左下角 但是精灵
  • cocos2d-x中有一个JniHelper类详细使用

    主体思路 通过JNI获取java虚拟机 再获取当前程序的JNI环境 通过JNI环境获取需要调用的java类信息 再获取需要调用的java类中的函数信息 再通过JNI环境调用 使用类信息 函数信息 调用对应的java函数 看起来好像有点复杂
  • 加密so文件中指定的函数

    加密so文件中指定的函数 作者 0n1y3nd丶 分类 逆向学习 发布时间 2014 09 04 22 24 61条评论 前言 上一篇文章中详细分析了对so文件中自定义section的加密 这一篇来分析下对so文件中自定义函数的加密 原文地
  • Cocos Creator 初识编辑器界面

    编辑器界面的介绍 1 资源管理器 2场景编辑器 3层级管理器 4属性检查器 节点和组件属性的工作区 以及脚步绑定位置 5控制库 预设控件的仓库库 可以通过拖拽方式添加到场景中 并且可以将用户自己的预制资源 prefab 添加到控件库里方便再
  • Texture::getSourceFileType()

    Texture getSourceFileType
  • cocos2d-x 卡牌翻牌效果的实现

    cocos2d x 卡牌翻牌效果的实现 2012年07月25日 综合 共 3085字 字号 小 中 大 评论关闭 猴子原创 欢迎转载 转载请注明 转载自Cocos2D开发网 Cocos2Dev com 谢谢 原文地址 http www co
  • Cocos2d-x 3.9教程:10.使用CocosStudio的UI编辑器从UI文件中加载布局和控件

    Cocos2d x 3 9教程 10 使用CocosStudio的UI编辑器从UI文件中加载布局和控件 1 1 使用CocosStudio的UI编辑器 1 1 1 安装和启动 从官网上下载2015年11月18日版本 Cocos studio
  • 环境搭建Cocos2d-x学习之创建Android工程和编译

    http www cnblogs com lhming archive 2012 06 27 2566467 html 安装好 相应的环境之后 我们便可以开始创建cocos2d x 的android 工程了 进入cocs2d x目录 用文本
  • Openframework在VS2010中的配置

    Openframework在VS2010中的配置 首先去官网下载Openframework 下载后最好解压到C盘根目录下 不然会出现各种问题 我也不知道怎么解决 随便打开其中的例程 然后右击该工程 选择属性 如下图 接着在C C 常规选项里
  • Cocos2d-x android无法解析cocos2dx库

    我从 macOS xcode 4 5 开始 我尝试过教程 使用cocos2dx完成macOSX的构建 问题发生在android源中 没有描述cocos2dxActivity的内容 所以 org cocos2dx lib不是其他文件 安卓没有
  • Cocos2D-x 3.0 中图元和精灵的 Z 索引不一致?

    我有两层 每个图层都有一个使用 OpenGL 进行的原始绘图 如下所示 void Layer1 drawPolygon glLineWidth 1 DrawPrimitives setDrawColor4B 255 255 255 255
  • Cocos2dx Android 构建错误:“arm-linux-androideabi-g++:没有这样的文件或目录”

    我下载了最新的cocos2dx 3 10 和NDK r11 我执行的时候出现以下错误cocos compile p android android studio Error AndroidDev android ndk r11 toolch
  • SSL 归档符号表错误(运行 ranlib)

    我构建了 OpenSS1 0 2g智能狐客户端 http smartfoxserver com API 1 6 3 Cocos2dx v3 Android Windows 10 64 位 它抛出错误 SSL 归档符号表错误 运行 ranli
  • 如何使用 Marmalade 编译 Cocos2d-X?

    有谁知道教程 或者三个简单的步骤来编译我用 Cocos2d x 和 Marmalade 编写的代码 我想将我已经在 Cocos2d X 中编译和使用的代码插入到 marmalade 项目中 然后进行编译 很多地方都写得很简单 但我却很难做到
  • Cocos2d-x:可以使用HTML(UIWebView)吗?

    我正在尝试cocos2d x现在我可以为 Android 构建 Javascript 示例并在浏览器中运行它们 现在我想创建自己的游戏 但由于有 HTML 背景 我宁愿使用 HTML 标签和 CSS 也不愿使用 Javascript 来设置
  • 安卓后退按钮不起作用

    我正在使用 cocos2dx 制作一个小游戏 在游戏的活动中我提供以下函数来处理后退按钮 Override public boolean onKeyDown int keyCode KeyEvent event return super o

随机推荐

  • Python3.7 实现TCP通信

    TCP 连接程序分为服务端和客户端两部分 服务端步骤如下 xff1a 1 创建套接字Socket 什么是套接字 应用层通过传输层进行数据通信时 xff0c TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题 为了区别不同的应用程序
  • CentOS、Ubuntu、Debian三个linux比较异同

    Linux有非常多的发行版本 xff0c 从性质上划分 xff0c 大体分为由商业公司维护的商业版本与由开源社区维护的免费发行版本 商业版本以Redhat为代表 xff0c 开源社区版本则以debian为代表 这些版本各有不同的特点 xff
  • LDAP 中 CN, OU, DC 的含义

    1 LDAP的存储规则 区分名 xff08 DN xff0c Distinguished Name xff09 和自然界中的树不同 xff0c 文件系统 LDAP 电话号码簿目录的每一片枝叶都至少有一个独一无二的属性 xff0c 这一属性可
  • bat修改hosts文件

    attrib R C WINDOWS system32 drivers etc hosts 64 echo 64 echo 127 0 0 1 aaaa bbb com gt gt C WINDOWS system32 drivers et
  • 使用org.apache.tools.zip实现zip压缩和解压

    import java io import org apache tools zip import java util Enumeration 功能 zip压缩 解压 支持中文文件名 说明 本程序通过使用Apache Ant里提供的zip工
  • freeModbus代码解读及移植笔记

    freeModbus的代码库还是很好用的 xff0c 本人在wince和C8051F410下均移植成功 xff08 只用到RTU模式 xff09 但freeModbus提供的文档比较少 xff0c 只能对照着Modbus协议一点点试着读懂源
  • MySQL变量:local_infile

    local infile服务器变量指示能否使用load data local infile命令 该变量默认为ON 该变量为OFF时 xff0c 禁用客户端的load data local infile命令 Sql代码 mysql gt sh
  • strcpy函数实现

    C语言标准库函数strcpy的一种典型的工业级的最简实现 返回值 xff1a 返回目标串的地址 对于出现异常的情况ANSI C99标准并未定义 xff0c 故由实现者决定返回值 xff0c 通常为NULL 参数 xff1a strDesti
  • C++库介绍

    1 C 43 43 标准库 xff08 STL xff09 STL六大组件 容器 算法 迭代器 仿函数 适配器 配接器 空间配置器 1 容器 各种数据结构 xff0c 如vector list deque set map等 xff0c 用来
  • 【C++】extern “C“ 用法详解

    前言 前面简单了解了C 43 43 中的extern 34 C 34 之后 xff0c 可能很多小伙伴对这个陌生的词非常困惑 xff0c 不能理解他的使用场景 所以本章内容就来详细了解extern 34 C 34 的用法 xff0c 这里使
  • FreeRTOS学习第三篇——FreeRTOS任务创建(下)

    声明 xff1a 本文为博主的学习篇章 xff0c 欢迎大家指错 xff0c 共同学习 在解决一下上篇遗留下来的问题之前 xff0c 还得提前做些功课 xff0c 了解一些FreeRTOS的全局变量 PRIVILEGED DATA stat
  • printf用法之打印二进制,八进制,十进制,十六进制

    printf用法之打印2进制 xff0c 八进制 xff0c 十进制 xff0c 十六进制 printf是格式化输出函数 xff0c 它可以直接打印十进制 xff0c 八进制 xff0c 十六进制 xff0c 输出控制符分别为 d o x
  • 【飞控开发基础教程7】疯壳·开源编队无人机-SPI(气压计数据获取)

    COCOFLY教程 疯壳 无人机 系列 SPI xff08 气压计数据获取 xff09 图1 一 SPL06 简介 SPL06 是歌尔公司最新推出新款气压传感器 xff0c 最新推出新款气压传感器SPL06 001 xff0c 歌尔是全球领
  • 【遥控器开发基础教程5】疯壳·开源编队无人机-SPI(2.4G 双机通信)

    COCOFLY教程 疯壳无人机 系列 SPI 2 4G 双机通信 图1 一 NRF24L01 1 1 NRF24L01 简介 NRF24L01 是由NORDIC 生产的工作在 2 4GHz 2 5GHz 的ISM 频段的单片无线收发器芯片
  • tcp之IO模型

    5种io模型 tcp服务器分为了5种io复用模型 分别是 阻塞io模型 非阻塞io模型 io复用 信号驱动io 异步io 本文会讲前面3种io模型的tcp服务器实现 本文只做tcp服务器实现 客户端逻辑处理 接收数据等缓冲区不做深入说明 简
  • C语言带参数的宏定义

    C语言允许宏带有参数 在宏定义中的参数称为 形式参数 xff0c 在宏调用中的参数称为 实际参数 xff0c 这点和函数有些类似 对带参数的宏 xff0c 在展开过程中不仅要进行字符串替换 xff0c 还要用实参去替换形参 带参宏定义的一般
  • Ubuntu U盘安装时安装时卡在Syslinux的问题

    用软碟通制作的U盘启动 xff0c ubuntu是11 10版本 xff0c 安装时显示 xff1a SYSLINUX 3 86 2010 04 01 EBIOS Copyright C 1994 2010 H Peter Anvin et
  • new 对象加括号和不加括号的区别

    原文 xff1a http www java123 net v 951963 html 在new对象的时候有加上 xff0c 有不加 xff0c 不知道这个到底是什么区别 xff1f 比如 xff1a CBase base 61 new C
  • cocos2d-x 3.x游戏开发学习笔记(1)--mac下配置cocos2d-x 3.x开发环境

    原文 xff1a http blog csdn net likendsl article details 34617725 打开用户目录下 bash profile文件 xff0c 配置环境 python view plain copy p
  • cocos2dx[3.2](15)——颜色混合BlendFunc

    原文 xff1a 点此 1 概念 混合 是指两种颜色的叠加方式 在新图片将要渲染画到屏幕上的时候 xff0c 将用在新图片中的红 绿 蓝和透明度信息 xff0c 与屏幕上已经存在的图片颜色信息相融合 说的具体一点 xff0c 就是把某一像素