Direct-X学习笔记--Alpha颜色混合

Alpha混合技术是灰常有用的东东。待我好好学习一下。

一.简介

首先看一下Alpha通道,Alpha通道是计算机中存储图片透明度信息的通道,它是一个8位灰度的通道,用256级灰度记录图像中的透明信息,定义透明,不透明,半透明等,其中黑色表示完全透明,白色表示不透明,灰色为半透明。
如果不用Alpha混合,我们绘制图形的颜色总是替换当前颜色缓冲区中存在的颜色,这样后面的物体总是覆盖在原有的物体上。但是当想要绘制类似于玻璃、水等具有透明效果的物体时,这种方法显然满足不了要求。通过定义一个表示物体半透明度的Alpha值和一个半透明计算公式,可以将要绘制的物体颜色与颜色缓冲区中存在的颜色相混合,从而绘制出具有半透明效果的物体,即传说中的Alpha Blend。

二.Direct-X中的Alpha融合公式

DirectX中的Alpha融合公式如下:

OutPutColor = (RGBsrc * Ksrc) OP (RGBdst * Kdst)

OutPutColor表示alpha混合后的颜色值.
RGBsrc表示源颜色值,即将要绘制的图元的颜色值
Ksrc表示源混合系数,通常赋值为表示半透明程度的alpha值,也可以是属于枚举类型D3DBLEND的任意值,用来和RGBsrc相乘。
RGBdst表示目标颜色值,即当前颜色缓冲区中的颜色值
Kdst表示目标混合系数,可以是属于枚举D3DBLEND的任意值,用来和RGBdst相乘。
OP表示源计算结果与颜色缓冲区计算结果的混合方法,默认状态下OP为D3DBLEND_ADD,即源计算结果与颜色缓冲区计算结果相加。


图形显示中,对alpha混合最普遍的用法是:把OP赋值为D3DBLEND_ADD,使源计算结果和颜色缓冲区计算结果相加,这样一来,alpha混合颜色的公式变为:

color = (RGBsrc * Ksrc) + (RGBdst * Kdst)


注意,这个公式中的*,其实指的是向量的点积运算,因为所谓的RGBsrc,和RGBdest都是一个颜色和Alpha组合而成的四元组(R,G,B,A)即红,绿,蓝,Alpha值,各对应融合的参数。所以更加详细的来看,上面的公式应该写成:

color = (Rsrc * Ksrc1 + Rdst * Kdes1, Gsrc * Ksrc2 + Gdst * Kdst2, Bsrc * Ksrc3 + Bdst * Kdst3, Asrc * Ksrc4  + Adst * Kdst4);

而其实这个公式可以更加简化,即我们要透明的物体使用一个系数K,而要透明到的地方只需要设置成(1- K)即可,在DX中已经为我们设置好了这个宏:即把Ksrc赋值为D3DBLEND_SRCALPHA,即当前绘制像素的alpha值;把Kdst赋值为D3DBLEND_INVSRCALPHA,即1减去当前绘制像素的alpha值。

其实上面的设置已经可以较好地模拟大多数半透明物体的效果。当然我们也可以自己再
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值