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