码迷,mamicode.com
首页 > 其他好文 > 详细

缓冲区Alpha Blend

时间:2016-04-04 09:12:50      阅读:410      评论:0      收藏:0      [点我收藏+]

标签:

(demo)源代码下载

Alpha blend

Alpha混合通常是为了实现透明效果,透明效果的程度通过alpha值来控制,对于一个8bit的alpha chanel,可以产生0-255级透明效果,0表示完全透明,255表示完全不透明,在D3D中alpha值的来源主要有三种.


颜色混合方程 

 技术分享

其中op在这里定义为混合操作

共有五种形式

ADD表示相加操作,即技术分享

SUBTRACT表示相关(目标-源),即技术分享

REV_SUBTRACT表示反射的相关(源-目标),即技术分享

MIN表示取源、目标颜色中较小值,即技术分享

MAX表示取源、目标颜色中较大值,即技术分享



融合因子:

D3DBLEND_ZERO 融合因子=(0,0,0,0)
D3DBLEND_ONE 融合因子=(1,1,1,1)
D3DBLEND_SRCCOLOR 融合因子=(R_src,G_src,B_src,A_src)
D3DBLEND_INVSRCCOLOR 融合因子=(1-R_src,1-G_src,1-B_src,1-A_src)
D3DBLEND_SRCALPHA 融合因子=(1-A_src,A_src,A_src,A_src)
D3DBLEND_INVSRCALPHA 融合因子=(1-A_src,1-A_src,1-A_src,1-A_src)
D3DBLEND_DESTALPHA 融合因子=(A_dst , A_dst, A_dst  , A_dst)
D3DBLEND_INVDESTALPHA 融合因子= (1-A_dst, 1-A_dst, 1-A_dst , 1-A_dst ).
D3DBLEND_DESTCOLOR 融合因子=(R_dst , G_dst, B_dst  , A_dst).
D3DBLEND_INVDESTCOLOR 融合因子= (1 - R_dst, 1 - G_dst, 1 - B_dst, 1 - A_dst).
D3DBLEND_SRCALPHASAT 融合因子= (f, f, f, 1),其中f = min(A_src,1 - A_dst)


其中R_src  , G_src , B_src  , A_src分别表示源(即source)像素的红、绿、蓝、透明四个分量值,而R_dst  , G_dst, B_dst  , A_dst表示目标(即destination)像素的红、绿、蓝、透明四个分量值。




下面我们用GLSL 来简单实现一下其中的一些效果.

BlendOp = Add;
SrcBlend = One;
DestBlend = Zero;

实现的效果,和没有用AlphaBlendEnable效果一样.

技术分享



BlendOp = Add;
SrcBlend = One;
DestBlend = One;

这是原操作数为一,目的操作数也为一的时候的效果,加上以前的反射效果,已经很好的模仿玻璃材质

技术分享


当然我们使用下面这种效果时,源操作数为0,目的操作数为1 时候,就看不见Teapot了

BlendOp = Add;
SrcBlend = Zero ;
DestBlend = One;

技术分享


下面我们使用源融合为源颜色

BlendOp = Add;
SrcBlend = SrcColor ;
DestBlend = One;

技术分享


我们接着使用源融合为源颜色,目的融合为目的颜色

BlendOp = Add;
SrcBlend = SrcColor ;
DestBlend = DestColor;

技术分享

(demo)源代码下载

缓冲区Alpha Blend

标签:

原文地址:http://blog.csdn.net/xiaoge132/article/details/51055136

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!