9.6 Alpha通道

9.5.4节的例子说明,在RGB混合中,源alpha分量可以用来控制透明度。混合方程中的源颜色来自于像素着色器。我们会在最后一章中看到,我们将漫反射材质的alpha值作为像素着色器的alpha输出。也就是说,漫反射贴图的alpha通道可以用来控制透明度。

float4 PS(VertexOUT pin) : SV_Target 
{
    …
    // 从漫反射材质和纹理中提取alpha
    litColor. a  =  gMaterial.Diffuse.a * texColor.a;
    
    return litColor; 
}

你可以使用任何一款流行的图像处理软件为纹理添加alpha通道,比如Adobe Photoshop,然后使用一种支持alpha通道的格式(例如,32位BMP格式或DDS格式)保存图像文件。不过,这里我们会展示另外一种方法,使用我们在前一章介绍的DXTex实用工具插入alpha通道。

假设我们有两幅图像:一幅是RGB彩色图像,另一幅是灰阶图像。这幅灰阶图像将作为alpha通道插入到彩色图像中(参见图9.6)。

图9.6
图9.6 RGB图像(左)和灰阶图像(右)。灰阶图像将插入到纹理的alpha通道中。

现在,运行DXTex工具程序,打开本章演示程序文件夹下的fire_rgb.bmp文件。火焰纹理会被自动载入为一个24位RGB纹理(即,D3DFMT_R8G8B8),其中红色、绿色和蓝色分量各占8位。我们必须为纹理指定一种支持alpha通道的格式,比如32位ARGB纹理格式D3DFMT_A8R8G8B8或支持alpha通道的D3DFMT_DXT5压缩格式。在菜单栏中选择Format>Change Surface Format命令,弹出如图9.7所示的对话框。选择DXT5格式,单击OK

图9.7
图9.7 修改纹理格式。这样就创建了一幅带有alpha通道的压缩纹理。

我们下一步要做的是向alpha通道导入数据。我们要把图9.6所示的8位灰阶贴图导入到alpha通道中。在菜单栏中选择File>Open Onto Alpha Channel Of This Texture命令,然后再选择Format>Generate Mip Maps命令。此时会弹出一个对话框,要求我们指定包含alpha数据的图像文件的位置。选择本章演示程序文件夹下的fire_a.bmp文件。图9.8展示了插入alpha通道后的程序界面——可以看到纹理已经与背景颜色混合在一起了。我们可以通过选择View> Change Background Color…菜单命令改变背景颜色。或者选择View>Alpha Channel Only命令,让窗口只显示alpha通道。

图9.8
图9.8 带有一个alpha通道的纹理。火焰纹理已经与蓝色背景混合在一起了。

现在,指定一个文件名(比如,fire.dds),保存纹理。

文件下载(已下载 953 次)

发布时间:2014/8/11 下午9:29:15  阅读次数:4529

2006 - 2024,推荐分辨率 1024*768 以上,推荐浏览器 Chrome、Edge 等现代浏览器,截止 2021 年 12 月 5 日的访问次数:1872 万 9823 站长邮箱

沪 ICP 备 18037240 号-1

沪公网安备 31011002002865 号