osg::BlendFunc介绍

混合是什么呢?混合就是把两种颜色混在一起。具体一点,就是把某一像素位置原来的颜色和将要画上去的颜色,通过某种方式混在一起,从而实现特殊的效果。
      假设我们需要绘制这样一个场景:透过红色的玻璃去看绿色的物体,那么可以先绘制绿色的物体,再绘制红色玻璃。在绘制红色玻璃的时候,利用“混合”功能,把将要绘制上去的红色和原来的绿色进行混合,于是得到一种新的颜色,看上去就好像玻璃是半透明的。

源因子和目标因子

下面用数学公式来表达一下这个运算方式。假设源颜色的四个分量(指红色,绿色,蓝色,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)

DST_ALPHA

表示使用目标颜色的alpha值来作为因子。

DST_COLOR

把目标颜色的四个分量分别作为因子的四个分量

ONE

表示使用1.0作为因子,实际上相当于完全的使用了这种颜色参与混合运算

ONE_MINUS_DST_ALPHA

表示用1.0减去目标颜色的alpha值来作为因子。

ONE_MINUS_DST_COLOR

表示用1.0减去目标颜色的颜色值来作为因子。

ONE_MINUS_SRC_ALPHA

表示用1.0减去源颜色的alpha值来作为因子。

ONE_MINUS_SRC_COLOR

表示用RGB(1,1,1,1)减去源颜色的值来作为因子。

SRC_ALPHA

表示使用源颜色的alpha值来作为因子。

SRC_ALPHA_SATURATE

(f,f,f,1); f=min(As,1-Ad)

SRC_COLOR

把源颜色的四个分量分别作为因子的四个分量

CONSTANT_COLOR

自定义的颜色作为因子

ONE_MINUS_CONSTANT_COLOR

表示用RGB(1,1,1,1)减去自定义的颜色作为因子

CONSTANT_ALPHA

自定义的alpha作为因子

ONE_MINUS_CONSTANT_ALPHA

表示用1.0减去自定义颜色的alpha值来作为因子。

ZERO

表示使用0.0作为因子,实际上相当于不使用这种颜色参与混合运算。

更灵活的还有

osg::BlendEquation

常用的混合方程:

S,D表示因子(见osg::BlendFunc),Cs和Cd表示源颜色和目标颜色

RGBA_MIN 

min(CsS,CdD)

RGBA_MAX 

max(CsS,CdD)

ALPHA_MIN 

 

ALPHA_MAX 

 

LOGIC_OP 

 

FUNC_ADD 

CsS+CdD

FUNC_SUBTRACT 

CsS-CdD

FUNC_REVERSE_SUBTRACT 

CdD -CsS

转载至http://blog.csdn.net/zhuqinglu/article/details/1782201

最新文章

  1. Java实现单链表的各种操作
  2. 2014年7月份第2周51Aspx源码发布详情
  3. LIS的nlogn
  4. Google 镜像站搜集[转]
  5. c# DateTime时间格式和JAVA时间戳格式相互转换
  6. Material Design之TextInputLayout、Snackbar的使用
  7. 高并发秒杀系统--SpringMVC整合
  8. StackExchange.Redis 模糊查询和删除
  9. minio golang client使用
  10. AOP方法增强自身内部方法调用无效 SpringCache 例子
  11. [05] 动态SQL
  12. App WebView实例化
  13. Presto 架构和原理简介(转)
  14. 一致性哈希算法(Consistent Hashing Algorithm)
  15. 101-advanced-React易用性,概述
  16. socket.io分布式
  17. 前端基础之BOM和DOM和三个小示例(计时器、搜索框、select联动)
  18. css/js(工作中遇到的问题)-6
  19. LeetCode——Detect Capital
  20. git强行推送到远端

热门文章

  1. 【bug】vue同一组件使用
  2. Ubuntu Apache vhost不执行php小记
  3. vagrant virtualbox 导入已导出的包和导出笔记
  4. 模拟求root——cf1067B
  5. python非对称加密模块rsa
  6. 从 i++ 和 ++i 说起局部变量表和操作数栈
  7. VS2010-MFC(对话框:属性页对话框及相关类的介绍)
  8. transient在java中的作用
  9. Spring IOC基础回顾 — 组件扫描和装配
  10. Java学习之垃圾回收机制