融合技术
能够将当前要进行光栅化的像素的颜色
与先前已光栅化并处于同一位置的像素的颜色进行合成。即将正在处理的图元像素的颜色值与存储在后台缓存中的对应的像素颜色值进行合成
可以利用该技术实现透明(transparency)效果
,融合的效果并不局限于普通玻璃类型的透明效果
- 1、融合的原理
- 2、不同的融合模式
- 3、通过
Alpha分量
控制图元的透明度
1、融合方程
在融合运算
时,必须遵循以下原则:
- 1、首先绘制那些不需要融合的物体
- 2、然后将
需要融合的物体
按照相对于摄像机的深度值进行排序(如果物体在观察坐标系中,该运算的效率会相当的高) - 3、最后,按照
自后往前的顺序
逐个绘制将要进行融合运算的物体
融合公式如下:
源融合因子
和目标融合因子
使我们可以各种方式修改源像素
和目标像素
的颜色值,从而可以获得各种不同的效果
D3D默认状态下是禁止融合运算的,可以通过绘制状态D3DRS_ALPHABLENDENABLE
来进行修改
融合的计算开销并不低
,所以应该仅在必需的场合中使用。不用时,应该立马关掉
2、融合因子
可以通过绘制状态D3DRS_SRCBLEND和D3DRS_DESTBLEND
来设置源融合因子和目标融合因子
可取的融合因子值列表
3、透明度
每个顶点颜色中的Alpha分量
与颜色值类似,都是沿着三角形图元表面渐变的,但它并非用于确定某像素的颜色值,而是用于确定像素的Alpha分量
Alpha分量为0时,该像素完全透明
为了能够用Alpha分量来描述像素的透明度
,我们必须将源融合因子
和目标融合因子
分别设置为D3DBLEND_SRCALPHA和D3DBLEND_INVSRCALPHA
。这些值恰好也是融合因子的默认值
我们并不直接使用
计算得到的Alpha分量,而往往时从纹理的Alpha通道
中获取Alpha信息
Alpha通道
是保留给存储了Alpha分量的纹理元
的一个额外的位集合(bits set)
在光栅化过程中
,当纹理映射到某个图元中时,纹理元的Alpha通道中
的Alpha分量也进行了映射,并成为该图元中某个像素的Alpha分量
指定Alpha来源
:默认状态下,如果当前设置的纹理拥有一个Alpha通道,Alpha值就取自该Alpha通道;如果没有Alpha通道,Alpha值就取自顶点的颜色值。当然也可以通过以下方式来显式指定:
alpha from vertex diffuse colors
d3ddev->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE);
d3dd3v->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTSS_ALPHAARG1);
alpha from texture alpha channel
d3ddev->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
d3dd3v->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTSS_ALPHAARG1);
XRGB中也是含有Alpha分量的,只不过Alpha分量为255
4、工具的使用
使用该工具可以创建一个具有Alpha通道的DDS文件
。DDS文件
是一种专为DirectX应用程序和纹理设计的图像格式
要在头文件中声明mesh的指针