第7章 融合技术

版权声明:转载请注明出处 https://blog.csdn.net/weixin_39918693/article/details/88715442

融合技术能够将当前要进行光栅化的像素的颜色与先前已光栅化并处于同一位置的像素的颜色进行合成。即将正在处理的图元像素的颜色值与存储在后台缓存中的对应的像素颜色值进行合成

可以利用该技术实现透明(transparency)效果,融合的效果并不局限于普通玻璃类型的透明效果

  • 1、融合的原理
  • 2、不同的融合模式
  • 3、通过Alpha分量控制图元的透明度

1、融合方程

融合运算时,必须遵循以下原则:

  • 1、首先绘制那些不需要融合的物体
  • 2、然后将需要融合的物体按照相对于摄像机的深度值进行排序(如果物体在观察坐标系中,该运算的效率会相当的高)
  • 3、最后,按照自后往前的顺序逐个绘制将要进行融合运算的物体

融合公式如下:
O u t p u t P i x e l = S o u r c e P i x e l S o u r c e B l e n d F a c t o r + D e s t P i x e l D e s t B l e n d F a c t o r OutputPixel=SourcePixel\bigotimes SourceBlendFactor + DestPixel\bigotimes DestBlendFactor

源融合因子目标融合因子使我们可以各种方式修改源像素目标像素的颜色值,从而可以获得各种不同的效果

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的指针

猜你喜欢

转载自blog.csdn.net/weixin_39918693/article/details/88715442
今日推荐