8.2 使用Alpha混合技术

本文详细介绍了Direct3D游戏编程中的Alpha混合技术,用于实现透明物体的遮挡效果。通过Alpha值和混合公式,可以创建出半透明效果。内容包括Alpha混合原理、实现半透明效果的步骤、顶点Alpha和材质Alpha的示例,帮助读者理解并应用Alpha混合技术。
摘要由CSDN通过智能技术生成

Let’s start!

在介绍深度测试的时候说到过Alpha混合的作用,就是为了实现游戏或其他场景中透明物体的遮挡问题:我们需要遮挡,但是并未看不见被遮挡的物体,有时,透过一块干净的玻璃观察物体,甚至尤其的清楚!
有了使用深度测试技术的基础,在学习Alpha混合技术便轻松一些,但是二者只是在使用方法上类似,真正的原理却大不相同。例如:深度测试是发生在深度缓冲区当中,而Alpha混合则是发生在颜色缓冲区内;深度测试从原理上看,是比较两个值,然后只保留其中的一个值,而Alpha混合,从名字上也看的出是二者兼顾。进一步说,实现物体透明的根本如何?真的如现实世界中那样,一个物体是透明的,所以被遮挡物体反射的光仍能穿过它,最终进到我们的眼睛里?带着这个问题,让我们一探究竟!

Alpha混合原理

在前面的程序中,经过深度测试后,总是会执行绘制图形的颜色“替换”或者“不替换”当前颜色缓冲区中已经存在的颜色,这取决于自己指定的比较函数(D3DCMPFUN)。如果想要绘制类似水或玻璃这种透明的物体,显然这种技术无法实现。
通过定义一个表示物体半透明度的Alpha值和一个半透明度计算公式。可以把将要绘制的物体颜色与颜色缓冲区中先前存在的颜色相混合,从而可以绘制出具有半透明效果的物体。Direct3D计算Alpha颜色混合的方法如下:
这里写图片描述

其中Color表示Alpha混合后的颜色值;RGB(src)表示源颜色值,即将要绘制的图元的颜色值,K(src)表示源混合系数,通常赋值为表示物体半透明程度的Alpha值,也可以是属于枚举类型D3DBLEND(下文详细介绍)的任意值,用来和RGB(src)相乘;类似的,RGB(dest)表示目标颜色值,即当前颜色缓冲区中的颜色值;K(dest)表示目标混合系数,可以是属于枚举D3DBLEND的任意值,用来和RGB(dest)相乘;OP表示原计算结果与颜色缓冲区计算结果的混合方法,默认状态下OP为D3DBLEND_ADD,即两个结果求和。

在图形显示中,对Alpha混合最普遍的用法是:把K(src)赋值为D3DBLEND_SRCALPHA,即当前绘制像素的Alpha值;把K(src)赋值为D3DBLEND_INVSRCALPHA,即1减去当前绘制像素的Alpha值;把OP赋值为D3DBLENDOP_ADD,使源计算结果和颜色缓冲区的计算结果相加,这样一来,Alpha混合颜色的公式变为:
这里写图片描述
使用这种设置可以较好的模拟大多数半透明物体的效果。注意!这里的源颜色与目标颜色意味着什么?当我们先绘制了一个茶壶,后绘制了一块玻璃来遮挡茶壶,在绘制玻璃的时候,需要与之前绘制的茶壶进行颜色混合(因为玻璃是透明的)。这时,公式中的源颜色是玻璃的像素颜色(相应的源Alpha也指的是玻璃像素中的Alpha值),公式中的目标颜色是茶壶也即后台缓冲区中已经存在的颜色。(相应的目标Alpha也是茶壶的像素Alpha值)也许这也为我们指定了在渲染图形时的顺序,这很重要!
通过上面的介绍及结合混合公式的理解,我们可以得出更简洁的结论:为了达到透明的效果,我们需要将重叠物体的颜色混合,首先我们需要找到一种混合方法,我们将两种颜色各自乘上了一个权重(weight),即把像素的Alpha通道作为这个权重的参考数据,接着又确定出一种计算方法(加法最为常用),来使两种颜色真正的“混合”起来,最终让物体变得“透明”。就是这样,现在是时候将这项技术付诸实践了!

实现半透明效果的步骤

我在最开始说过,Alpha混合的实现步骤与深度测试很相似,我想你也许可以猜到,我们又应该请出我们的老朋友LPDIRECT3DDEVICE9::SetRenderState函数了。让我们闭目思考一下深度测试的使用步骤,因为需要测试的数据结构,我们首相用d3dpp告诉Direct3D创建一个深度缓冲区,然后我们应该激活,对了,还得根据深度测试的过程来设置一些比较方法……

(1)启用Alpha混合
(2)设置Alpha混合系数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值