microsoftdirect3d在绘制场景时可以整合各种来源的色彩资讯-read.doc

microsoftdirect3d在绘制场景时可以整合各种来源的色彩资讯-read.doc

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
microsoftdirect3d在绘制场景时可以整合各种来源的色彩资讯-read

10. Alpha混合 Microsoft Direct3D在绘制场景时可以整合各种来源的色彩信息:顶点颜色、目前材质、贴图对映以及原先写入绘制画面的颜色。Direct3D不光只是选择这些来源之一的色彩,而是混合其中数种颜色。一个叫做alpha的系数可以用来计算混合运算时的权重。alpha值可以储存在顶点、材质以及贴图对映中。Alpha通常被视作不透明的程度;也就是alpha值0表示完全透明,alpha值1表示完全不透明,而介于0到1之间的alpha值表示某种程度的半透明。藉由alpha混合的使用,您可以建立有趣而真实的视觉效果。 与画面缓冲区混合   当Direct3D绘制一个形状时,会依据该形状所用贴图、材质以及打光信息的色彩来计算各个像素的颜色。您可以用alpha混合来结合形状的颜色和原先储存在画面缓冲区(来自另一个形状或清除用的颜色,后者也就是用IDirect3DDevice7::Clear方法清除场景所用的颜色)中像素的色彩。 利用这种形式的alpha混合,您可以仿真半透明对象、结合两种影像,也可以加入力场、火焰、电浆束、以及光影对映之类的特效。alpha信息可以储存在多边形的顶点结构或贴图对映的各个贴图图素中。Direct3D会用下列公式来计算所绘制形状中各像素的最终色彩: FinalColor = SourcePixelColor · SourceBlendFactor + DestPixelColor · DestBlendFactor 公式中所用的变量定义如下: ?FinalColor?输出到绘制绘图页的像素颜色   ?SourcePixelColor?目前形状计算出的像素颜色   ?SourceBlendFacto?用来计算要将多少百分比的来源像素颜色套用在最终颜色上(合法值是0.0到1.0)。   ?DestPixelColor?画面缓冲区中目前像素的颜色。   ?DestBlendFactor?用来计算要将多少百分比的画面缓冲区目前的像素颜色套用在最终颜色上(合法值是0.0到1.0)。   Direct3D让您改变SourceBlendFactor和DestBlendFactor旗标来产生所要的效果。举例来说,如果您把SourceBlendFactor设成D3DBLEND_ONE (1.0, 1.0, 1.0, 1.0)而把DestBlendFactor设成D3DBLEND_ZERO (0.0, 0.0, 0.0, 0.0),最终颜色就只会用多边形的颜色。反过来说,如果把SourceBlendFactor设成D3DBLEND_ZERO并把DestBlendFactor设成D3DBLEND_ONE,多边形就会完全透明而最终像素就变成和画面缓冲区原先的颜色一样。如果把混合系数设到这两个极端之间并让两个值加起来等于1.0,多边形就会半透明地和画面缓冲区混合起来。以大多数有趣的透明效果(如火焰及电浆束)来说,必须把SourceBlendFactor和DestBlendFactor设成使用贴图或顶点的值,不能单纯地只用固定值。改变各个画面的alpha值就可以产生闪烁的效果。另外如果FinalColor的值大于1.0(比如SourceBlendFactor和DestBlendFactor都是(1.0, 1.0, 1.0, 1.0)),颜色值最大只能到1.0,因为1.0是可能的最大值。 回想在前面几章,当您设定一个颜色时,事实上是在设定红、绿、蓝以及alpha值。所以您可以用各个贴图中贴图图素的alpha值加上SourceBlendFactor 变量来控制透明的结果。 Direct3D会依据您所选的混合旗标选用不同的公式,将来源颜色和目的颜色结合成最终颜色。举个例子,让我们假设下列变量定义来源及目的值: (sr, sg, sb, sa)是来源像素的信息。 (dr, dg, db, da) 是目的像素的信息。 另外再假设来源混合旗标和目的混合旗标都被设成D3DBLEND_SRCALPHA,也就是会产生表示成(sa,sa, sa, sa)的混合系数。有了这些定义,就可以用下面的公式来计算最终的混合颜色(fr, fg, fb, fa): (fr, fg, fb, fa) = (sr· sa + dr · sa, sg · sa + dg· sa, sb · sa + db· sa, sa·sa + da·sa) 下面是各种可能的混合旗标的说明。除了有特别注明之外,这些旗标都可以套用在D3DRENDERSTATE_SRCBLEND状态或D3DRENDERSTATE_DESTBLEND状态中: ?D3DBLEND_ZERO?混合系数为(0, 0, 0, 0)。   ?D3DBLEND_ONE?混合系数为(1, 1, 1,

文档评论(0)

wangsux + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档