9. 烟雾
在 Microsoft Direct3D 立即模式应用程序中可以用烟雾来达成各种效果。在场景中加入烟雾,
就能以强大的方式模拟真实世界。再结合适当的声音和音乐,烟雾可以协助您建立能传达各种
气氛的世界,营造出由神秘或惊悚到幻想,或是由异世界到乡村或幽默的感觉。而对实时应用
(需要尽可能争取最佳的效能)更为重要的是,您可以用烟雾来隐藏当对象进入观察范围而突
然出现的怪异效果。只要建立适当的烟雾,让使用者看不到远程裁切平面后就可以避免突然出
现的问题了。
Direct3D 将场景中各对象的颜色与所选的烟雾色彩混合来产生烟雾效果。混合的程度是依对象
到观察点的距离而定的。Direct3D 会把远处对象的颜色混合成几近烟雾的色彩。接近观察点的
对象则只有少许变化或完全不受影响。举例来说,如果您用蓝或白作为烟雾颜色,对象会在远
处渐渐模糊,产生像雾一样的错觉。如果您用黑色作为旗标颜色,对象会像是隐没在黑暗的夜
景中。如果场景设有纯色背景(也就是说绘制的对象并未覆盖全部画面像素),应该把烟雾颜
色设成背景色。不过如果绘出的对象会覆盖所有的画面像素,就可以任选烟雾颜色。然后当多
边形远离摄影机时,就会缓缓的隐入背景。白色能在这个例子中产生真实的烟雾场景。
Direct3D 提供两种不同型式的烟雾供您在场景中使用:顶点烟雾与像素烟雾。(我们会在本章
稍后深入讨论这些烟雾类型)。要决定主机系统具备哪些功能,可以检查下列在
D3DPRIMCAPS 结构的 dwShadeCaps 成员中的旗标:
D3DSHADECAPS_FOGFLAT表示装置在平面上色模式中支持烟雾。
D3DSHADECAPS_FOGGOURAUD表示装置在 Gouraud 上色模式中支持烟雾。
D3DSHADECAPS_FOGPHONG表示装置在 Phong 上色模式中支持烟雾。DirectX 7
中不支持这种模式。
另外您可以检查 D3DPRIMCAPS 结构的 dwRasterCaps 成员中的旗标:
D3DPRASTERCAPS_FOGRANGE表示装置支持范围式(range-based)烟雾,在
计算场景的烟雾效果时是用对象距观察者的距离而不是用 z 坐标(对象的深度)。
D3DPRASTERCAPS_FOGTABLE 表示装置会用由像素深度转换烟雾值的表来计算
烟雾值。
评论1
最新资源