osg::BlendFunc

原创 2007年09月12日 15:01:00

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 

 

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学习笔记22——设置物体透明,再恢复

设置物体透明,trans是透明度的设置,这里如果没有setRenderingHint()虽然看起来是透明的,但模型还是会遮挡其他模型。然后就是BLEND要打开,光照和深度测试要关掉。模型的材质也要事先...
  • u011310341
  • u011310341
  • 2017年03月29日 14:37
  • 633

OSG 学习第三天:渲染状态

OSG 渲染状态 前言:撸了两天代码,决定换一种学习方式试试。 渲染状态(Rendering State)  OSG支持绝大部分的OpenGL 固定功能管...
  • MissXy_
  • MissXy_
  • 2017年08月03日 22:09
  • 619

osg::ClipNode与osg::ClipPlane

osg::ClipNode继承自osg::Group,功能是定义场景中裁剪面的位置。 osg::ClipPlane继承自osg::StateAttribute,定义一个裁剪面,可参考:...
  • zhuqinglu
  • zhuqinglu
  • 2007年09月13日 16:12
  • 3527

OSG对象设置透明

网格对象的透明设置: //方法1 osg::ref_ptr mat = new osg::Material; mat->setDiffuse(osg::Material::Front_AND_BACK...
  • wang15061955806
  • wang15061955806
  • 2015年10月28日 11:28
  • 2042

OSG::绘制

本例子演示了绘制不同的几何图元。 osg::PrimitiveSet::POINTS对应OpenGL中的GL_POINTS绘制单独的点 osg::PrimitiveSet::LINES对应Open...
  • a498506133
  • a498506133
  • 2013年05月01日 10:47
  • 1075

OSG 学习第四天:材质

OSG 材质 1. osg::Material 材质类 osg::Material 继承自 osg::StateAttribute 类。 材质类示例://2017...
  • MissXy_
  • MissXy_
  • 2017年08月05日 00:06
  • 238

OSG中的材质Material

材质概念材质,反应的是物体表面对入射光的反射量。发亮的材质,反射更多的入射光。发暗的材质,吸收更多的入射光。对于透明的表面,一些入射光穿透了材质。 OSG中对材质的处理OSG中,通过osg::Mate...
  • snail_hunan
  • snail_hunan
  • 2017年05月01日 15:59
  • 732

osg::Material 材质

一、从OpenGL的角度来看,材料有如下几种属性: 1. 环境; 2. 散射; 3. 镜面颜色; 4. 光泽度; 5. 发射光颜色。 也就是说,材料的属性必须与光照...
  • shui_zhi_lian
  • shui_zhi_lian
  • 2014年09月11日 10:05
  • 1196

OSG学习笔记20——光照和材质的设置(正确绘制出想要的颜色)

本来一开始学习OSG和Opengl的时候,因为用不太到关于颜色渲染之类的内容,关注的比较多的都是如何与场景进行交互。现在突然想给场景添加一个地面,发现不能得到正确的结果,并且加载进来的模型也会随着地面...
  • u011310341
  • u011310341
  • 2017年03月25日 16:43
  • 1666

OSG学习:裁剪变换(1)

在OSG中,默认了6个裁剪平面以去除没有必要显示的物体。也可以自己定义其他的裁剪平面来确定裁剪。 osg::ClipPlane类继承自osg::StateAttribute类,封装了OpenGL中的...
  • u012130706
  • u012130706
  • 2017年07月24日 22:33
  • 324
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:osg::BlendFunc
举报原因:
原因补充:

(最多只允许输入30个字)