D3D学习笔记:混合

混合(blending

1.混合:

用已经光栅化的像素光栅化同一位置的像素。就是我们在图元上混合图元。

使用混合时,下面的规则将被遵循:

规则:首先不使用混合绘制物体。然后根据物体离摄象机的距离使用混合对物体拣选。

下面的公式是用来混合两个像素值的:

上面的所有变量都是一个 4D颜色向量(r,g,b,a),并且x符号是表示分量相乘。

  OutputPixel——混合后的像素结果。

  SourcePixel——通常被计算的像素,它是利用在后缓冲区中的像素来被混合的。

  SourceBlendFactor——在[01]范围内的一个值。它指定源像素在混合中的百分比。

  DestPixel——在后缓冲区中的像素。

  DestBlendFactor——在[01]范围内的一个值。它指定目的像素在混合中的百分比。

 

2.开启混合状态,混合默认是被关闭的

Device->SetRenderState(D3DRS_ALPHABLENDENABLE,true);

 

3.设置混合要素:

分别设置源混合要素和目的混合要素。

Device->SetRenderState(D3DRS_SRCBLEND, Source);

Device->SetRenderState(D3DRS_DESTBLEND, Destination);

SourceDestination可以是以下类型:

l  D3DBLEND_ZERO——blendFactor=(0, 0, 0, 0)

l  D3DBLEND_ONE——blendFactor=(1, 1, 1, 1)

l  D3DBLEND_SRCCOLOR——blendFactor=(rs, gs, bs, as)

l  D3DBLEND_INVSRCCOLOR——blendFactor=(1-rs, 1-gs, 1-bs, 1-as)

l  D3DBLEND_SRCALPHA——blendFactor=(as, as, as, as)

l  D3DBLEND_INVSRCALPHA——blendFactor=(1-as, 1-as, 1-as, 1-as)

l  D3DBLEND_DESTALPHA——blendFactor=(ad, ad, ad, ad)

l  D3DBLEND_INVDESTALPHA——blendFactor=(1-ad, 1-ad, 1-ad, 1-ad)

l  D3DBLEND_DESTCOLOR——blendFactor=(rd, gd, bd, ad)

l  D3DBLEND_INVDESTCOLOR——blendFactor=(1-rd, 1-gd, 1-bd, 1-ad)

l  D3DBLEND_SRCALPHASAT——blendFactor=(f, f, f, 1)  ,   f=min(as, 1 – ad)

l  D3DBLEND_BOTHINVSRCALPHA——这种混合模式设置源混合要素为(1-as, 1-as, 1-as,

l  as,)以及目的混合要素为(as,as,as,as)。这种混合模式仅对D3DRS_SRCBLEND有效。

源和目的混合要素的默认值分别是D3DBLEND_SRCALPHAD3DBLEND_INVSRCALPHA

 

4.透明度(Alpha

alpha 的有效值在[0,255]范围内,[0,255]代表不透明度[0%,100%]。让alpha部分描述像素的透明等级,我们必须设置(也是默认的)源混合要素为D3DBLEND_SRCALPHA以及目的混合要素为D3DBLEND_INVSRCALPHA

 

5.Alpha 通道(Alpha Channel)

代替使用 Alpha 部分来计算遮影,能够从纹理的 alpha 通道中得到 alpha 信息。Alpha 通道是额外的设置位,用它来保存每一个点的alpha值。当一个纹理被映射到一个图元上时,在 alpha 通道中的 alpha 信息也被映射,并且它们利用 alpha 信息为每个像素赋予纹理。

 

6.指定 Alpha 资源

默认情况下假如设置一个有alpha通道的纹理,alpha值从在alpha通道中获得。假如没有 alpha通道,那么 alpha 值是通过顶点颜色获得。也可以手动指定Alpha资源。

// compute alpha from diffuse colors during shading

Device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE);

Device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);

// take alpha from alpha channel

Device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);

Device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1);

 

D3DTSS_ALPHAOP

Texture-stage state is a texture alpha blending operation identified by one member of the D3DTEXTUREOP enumerated type. The default value for the first texture stage (stage 0) is D3DTOP_SELECTARG1, and for all other stages the default is D3DTOP_DISABLE.

D3DTSS_ALPHAARG1

Texture-stage state is the first alpha argument for the stage, identified by by D3DTA. The default argument is D3DTA_TEXTURE. If no texture is set for this stage, the default argument is D3DTA_DIFFUSE. [默认参数值是D3DTA_TEXTURE,没有纹理设置情况下,默认是D3DTA_DIFFUSE.]

7.使用混合的必要步骤是:

1.  设置混合要素D3DRS_SRCBLEND  D3DRS_DESTBLEND

2.  假如你使用alpha部分,指定资源(材质或alpha通道)

3.  允许alpha混合渲染状态。

例子:

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值