惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
B
Blog
V
V2EX
T
Tailwind CSS Blog
Hugging Face - Blog
Hugging Face - Blog
博客园 - 【当耐特】
博客园 - 聂微东
博客园 - 叶小钗
博客园 - 三生石上(FineUI控件)
The Cloudflare Blog
J
Java Code Geeks
H
Help Net Security
雷峰网
雷峰网
Apple Machine Learning Research
Apple Machine Learning Research
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Engineering at Meta
Engineering at Meta
F
Fortinet All Blogs
Martin Fowler
Martin Fowler
D
Docker
L
LangChain Blog
人人都是产品经理
人人都是产品经理
爱范儿
爱范儿
WordPress大学
WordPress大学
V
Visual Studio Blog

博客园 - AppleSeeker(冯峰)

XNA游戏开发——播放音效(2) XNA游戏开发——播放音效(1) 公告板 粒子系统介绍 在游戏框架中实现天空体 创建天空体 天空体介绍 使用追踪相机 实现追踪摄像机 创建一个追踪摄像机(2) 创建一个追踪摄像机(1) 相机定位 XNA——相机类 XNA——使用摄像机 在游戏框架中添加支持 渲染已保存的几何图形 将已保存的几何图形导入到XNA项目中 导出3D几何体 导入几何图形——SketchUp介绍
添加雾化效果
AppleSeeker(冯峰) · 2012-06-17 · via 博客园 - AppleSeeker(冯峰)

XNA提供了一个有用的功能是能够在渲染场景中添加雾化效果,它提供简单的模仿真实世界中的雾,让对象逐渐远离相机知道看不到它们。

显然,Windows Phone 7设备可以渲染到屏幕上,有大量内容是被限制的,如果你已打开环境延伸到远方,在某个阶段你必须绘制一条线,并告诉XNA不会去绘制任何较远的东西。这个距离限制对于剪辑平面通常通过设置一个适当的值来达到,当设置投影矩阵,如我们在第7章节所讨论的那样。

缺点是,当对象到达剪辑平面,它们明显消失了。它们通常留下它们的一部分任然可见,当他们的边缘穿过剪辑平面,会导致一个非常不自然的场景。

在它们消失之前,你可以使用雾化效果通过允许它们逐步消失来帮助减少消失对象的影响。这个消失的结果,往往会忽视玩家一个更刺耳的效果。

雾作为游戏特性是非常有用的,也同样有它自己的权利。它可以使得环境感到更封闭更恐惧,还可以添加现场的气氛,带走一些渲染图形经常遭受的临床清洁。

下图所示了一些场景示例,是在更早的XNA中使用雾化效果渲染的示例工程。左边图片雾化效果禁用,虽然仍旧有2张图片显示逐渐增加的雾化效果。在右边图片中,远处的建筑已经完全消失在背后。

image

XNA通过使用简单而有效的一招来实现雾化。由于它为每一个渲染的顶点计算颜色和光照,它决定了顶点离视角有多远。当顶点变得更远,因此受到更大程度的雾,XNA通常淡化顶点颜色,逐渐向定义的雾的颜色转变。如果对象特别远,它的顶点颜色将完全设置为定义的雾化颜色,引起对象完全雾化并融入背景中。正如其它顶点属性,雾化效果修改三角形的顶点,导致它们全部收到雾化效果的影响。

雾是非常容易使用的,只需要少量的参数来设置。所有这些参数都通过BasicEffect对象提供,并且当我们的类级效果对象初始化时,我们可以在它旁边构建剩余的效果属性。雾化属性当然可以在游戏的任何阶段被修改(即使在个别对象渲染),如果需要的话。

这有4个可用属性来设置雾化行为和出现效果,如下:
1)FogEnabled:布尔值,用来开启/关闭雾化特性。默认值为false。
2)FogStart:设置距离(在XNA单元中,从相机视角开始)在即将开始应用的雾化效果。在这个距离前面的顶点将一点都不会受到雾化的影响。
3)FogEnd:在雾化效果即将结束后设置距离。最终,雾化完全不透明,并且所有顶点在这个距离之上将完全变成雾的颜色。
4)FogColor:雾的颜色。通常当使用雾化来渲染时,使用的背景色,设置的雾化颜色来和它匹配。

一个关于XNA的雾化的实际示例可以在Fog示例工程中看到。FogGame.Initialize函数中设置雾化参数。随意去使用这些参数并用这些效果来试验它们所生成的图形效果。

需要关心的是产生一个好的雾化场景。雾仅影响渲染的三角形,所以背景不会通过任何存在的雾所改变。因此重要的是确保雾化颜色和背景颜色几乎是相同的;否则,固体雾化颜色结构与背景颜色形成鲜明的对比。

然而,使用不同的雾和背景颜色是有用的:如果配置雾以便开始和结束值都为9(整个场景完全充满雾),这个配置将产生一个轮廓倚靠在场景背景中,无论雾的颜色是如何定义的。通过增加雾的最终和开始值的距离,这个轮廓可以消失在视线中。

这也是同样重要的记住在每一个三角形中,在它的顶点中修改来计算雾。如果使用非常大的三角形(诸如在我们示例中的地面),雾并不会总是适用于你所期望的,有时会导致接近的对象受到雾化效果比远离的对象更多。