DirectX学习笔记(八):Direct3D融合技术详解及物体透明效果的实现

前言:


融合技术,将当前要进行光栅化的像素的颜色与先前已经光栅化并处于同一位置的像素的颜色进行合成,即:将正在处理的图元颜色值与存储在后台缓存中的像素颜色值进行合成,利用该技术,可以获得很多种效果,比如:透明效果。





相关知识说明:


1.融合方程:


当我们处于背景图和茶壶三角形单元进行光栅化计算时,我们需要将计算得到的茶壶的像素颜色和背景图的像素颜色进行合成,以使得背景图透过茶壶得以显示。这种将当前计算得到的像素(源像素)颜色值与先前计算得出的像素(目标像素)颜色值合成的做法就是融合技术。


首先,上方程:OutputPixel = SourcePixelⓧSourceBlendFactor + DestPixel ⓧ DestBlendFactor

简单来说:融合后的颜色值  =  当前计算得出的像素颜色值 ⓧ  源融合因子 + 处于后台缓存的像素颜色值 ⓧ  目标融合因子.。

OutputPixel:融合后的颜色值。

SourcePixel:当前计算得到的、用于与后台缓存中对应像素进行融合的像素颜色值。

SourceBlendFactor :源融合因子,指定了源像素的颜色值在融合中所占的比例。在[0,1]区间内。

DestPixel :当前处于后台缓存中的像素颜色值。

DestBlendFactor:目标融合因子,指定了目标像素的颜色值在融合中所占的比例。在[0,1]区间内。


通过此方程可以看出我们可以通过源融合因子和目标融合因子修改源像素和目标像素的颜色值,以达到不同的效果。


下强调一点:

融合计算的开销还是比较大的,所以当我们绘制玩需要进行融合的几何体后,一定要禁用融合。在对三角形单元元组进行处理时,之后应该l立刻绘制出来,这样就避免了在每帧图像中都启用和禁用融合运算。


我们通过如下方法进行融合运算的启动和禁用:

// 启用融合运算
_device->SetRenderState(D3DRS_ALPHABLENDENABLE, true);
// 禁用融合运算
_device->SetRenderState(D3DRS_ALPHABLENDENABLE,false);






2.融合的方式和融合系数整理

通过设定融合因子和目标融合因子,我们可以创建一系列不同的效果。我们通过如下方式设定D3DRS_SRCBLEND 和D3DRS_DESTBLEND的值来对源融合因子和目标融合因子分别设定:

//通过设定D3DRS_SRCBLEND 和D3DRS_DESTBLEND的值来对源融合因子 和目标融合因子分别进行设定。
	_device->SetRenderState(D3DRS_SRCBLEND, Source);
	_device->SetRenderState(D3DRS_DESTBLEND, Destination);


融合方式及操作符:
D3DBLENDOP_ADD 源像素计算结果与目标像素的计算结果相加,即【最终结果】=【源】+【目标】
D3DBLENDOP_SUBTRACT 源像素计算结果与目标像素的计算结果相减,即【最终结果】=【源】-【目标】
D3DBLENDOP_REVSUBTRACT 目标像素的计算结果减去源像素计算结果,即【最终结果】=【目标】-【源】
D3DBLENDOP_MIN 在源像素计算结果和目标像素计算结果之间取小者。即【最终结果】= MIN(【目标】,【源】)
D3DBLENDOP_MAX 在源像素计算结果和目标像素计算结果之间取大者。即【最终结果】= MAX(【目标】,【源】)



Source
Destination 可以取下面的值


融合因子:
D3DBLEND_ZERO 融合因子=(0,0,0,0)
D3DBLEND_ONE 融合因子=(1,1,1,1࿰

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值