D3D融合

融合技术能使我们将当前要进行光栅化的像素的颜色与先前已光栅化并处于同一位置的像素的颜色进行合成。

1.融合方程

对两个像素颜色进行融合处理的公式如下:

OutputPixel=SourcePixel*SourceBlender+DestPixel*DestBlendFactor

公式中的每一个变量都是一个4D颜色向量(r,g,b,a)。

在进行融合运算时,必须遵循以下原则:首先绘制不需要进行融合的物体,然后再绘制将要进行融合的物体。融合运算的开销并不低,应仅在必需的场合使用。Direct3D中,默认是关闭混合的,可以通过下面的代码启用:

Device->SetRenderState(D3DRS_ALPHABLENDENABLE, true);

2.融合因子

通过设定原融合因子和目标融合因子,我们可以创建一系列不同的融合效果。设定代码如下:

Device->SetRenderState(D3DRS_SRCBLEND,SourceBlendFactor);

Device->SetRenderState(D3DRS_DESTBLEND, DestBlendFactor);

默认值是:SourceBlendFactor=D3DBLEND_SRCALPHA;DestBlendFactor=D3DBLEND_INVSRCALPHA。

3.透明度

Alpha分量主要用于指定像素的透明度。一般情况下会从纹理图片中的alpha通道获取Alpha信息。默认状态下,如果当前设置的纹理拥有一个Alpha通道,Alpha值就取自该Alpha通道;如果没有Alpha通道,Alpha值就取自顶点的颜色。但也可以通过设置绘制状态来来指定Alpha值的来源(漫反射颜色或Alpha通道):

// use alpha in material's diffuse component for alpha

Device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE);
Device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
或者
// use alpha channel in texture for alpha
Device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
Device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);
 

4.纹理图片Alpha通道的制作

可以使用Utilities\bin\x86目录下的DxTex.exe来指定图片的Alpha通道及其值。步骤如下:

a.更改图片格式:菜单Format->Change Surface Format...,选择格式A8R8G8B8。

b.添加Alpha通道:菜单File->Open Onto Alpha Channel Of This Texture,选择Alpha通道图片即可。纯黑到纯白对应全透明到不透明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值