融合技术
该技术能使我们将当前要进行光栅化的像素的颜色与先前已光栅化并处于同一位置的像素的颜色进行合成.主要是透明效果。
融合处理的步骤:
1 设置融合因子D3DRS_SRCBLEND和D3DRS_DESTBLEND。
2 如果使用Alpha分量,还需指定其来源(材质或Alpha通道)。
3 启用Alpha融合绘制状态。
融合方程
OutputPixel=SourcePixel*SourceBlendFactor+DestPixel*DestBlendFactor
融合后的颜色=源像素颜色*源整合因子+后台缓存像素颜色*目标融合因子.
·SorcePixel 当前计算得到的、用于与后台缓存中对应像素进行融合的像素颜色值。
·SourceBlendFActor 源融合因子。 指定了源像素的颜色值在整合中所占比例,该值在区间[0,1]内。
·DestPixel 当前处于后台缓存中的像素颜色值。
·DestBlendFactor 目标融合因子。指定了目标像素的值在融全中所占的比例。该值的区间[0,1]内。
Dirct3D中默认状态是禁止整合运算的。设置D3DRS_ALPHABLENDENABLE为true。 启用了融合运算。
融合因子:
通过设定源融合因子和目标融合因子,我们可创建一系列不同的融合效果.
device->SetRenderState(D3DRS_SRCBLEND, source);//源资源
device->SetRenderState(D3DRS_DESTBLEND, source);//目标资源
透明度
每个顶点颜色中的Alpha分量与颜色值类似,都是沿着三角形单元表面渐变,但它并非用于确定某像素的颜色值,而用于确定像素的Alpha分量。Alpha分量主要用于指定像素的透明度。
顶点Alpha值为0是透明,为128半透明,255不透明。 [0,255]对应透明度[0%, 100%]。
1.Alpha通道;
我们并不直接使用计算得到 的Alpha分量,而往往是从纹理的Alpha通道中获取Alpha信息Alpha通道是保留给存储了Alpha分量的纹理元的一个额外的位集合(bits set)。
2.指定Alpha来源
默认状态下,如果当前设置的纹理拥有一个Alpha通道,Alpha值就取自该Alpha通道.如果没有Alpha通道,Alpha值就取自顶点的颜色.
device -> SetTextureStageState( 0 , D3DTSS_ALPHAOP, D3DTA_SELECTARG1);
device -> SetTextureStageState( 0 , D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
device -> SetTextureStageState( 0 , D3DTSS_ALPHAOP, D3DTA_SELECTARG1);
《DirectX9.0 3D游戏开发编程基础》笔记
江西理工大学 FangSH 2010-4-1