摘要:
问题 你想让声音循环播放,例如,播放背景音乐或播放连续的声音,例如一个汽车引擎的声音。 注意:因为Zune不支持Xact,你需要使用SoundEffect.Play()的重载方法循环播放声音,可见教程7-1中的对应解释。 解决方案 使用XAct audio tool,可以很容易地表示一个声音是否要循环播放。你将在XNA代码中创建一个Cue对象,因为你需要能够在播放过程中进行暂停或停止操作。...
阅读全文
posted @ 2011-03-03 10:57
AlexCheng
阅读(369)
推荐(0)
摘要:
问题 你想在游戏中播放声音。 注意:Zune不支持Xact,所以参见教程7-1和7-2学习如何在Zune上播放声音。 解决方案 通过使用Xact,一个XNA Game Studio 3.0自带的免费工具,你可以创建包含游戏中使用的所有声音的Xact项目。你可以将这个Xact项目导入到XNA项目中,这样就可以使用一行简单的代码播放存储在XAct项目中的声音。 工作原理 首先,确保你已经...
阅读全文
posted @ 2011-03-03 10:54
AlexCheng
阅读(503)
推荐(0)
摘要:
问题 你想在XNA游戏中播放一个MP3或WMA声音文件。 解决方案 XNA可以使用默认内容管道将MP3或WMA声音文件加载到一个Song对象中,加载之后,就可以使用静态的MediaPlayer类播放Song对象了。 工作原理 首先将MP3或WMA文件添加到XNA项目中。这和添加一个图像是一样的,可参见教程3-1。最简单的方法就是将MP3或WMA文件拖动到Content文件夹上。 你需要...
阅读全文
posted @ 2011-03-01 10:16
AlexCheng
阅读(326)
推荐(0)
摘要:
问题 你想有一个快速播放音效的方法。 解决方案 在XNA3.0中,你可以直接从XNA中加载和播放声音,而无需使用Xact加载它们。虽然这个方法移除了一些Xact的高级功能,但可以让播放音效变得非常容易。 工作原理 首先在项目中添加音效文件,方法与在项目中添加一张图像是一样的,可参见教程3-1。最简单的方法是将一个.wav文件拖动到解决方案的Content文件夹上。 将.wav文件添加...
阅读全文
posted @ 2011-03-01 10:14
AlexCheng
阅读(399)
推荐(0)
摘要:
问题 虽然你已经掌握了基本的计算机实时光照,但你应该注意到光源还没有投射出阴影。这是因为pixel shader是基于光线与法线的夹角计算光照的。直到现在,pixel shader还没有考虑到光线与像素间的物体。 阴影映射(shadow mapping)技术在我的网站(http://www. riemers. net)的第三个系列中加以介绍,这个技术可以对一个光源生成正确的阴影,但是你想用de...
阅读全文
posted @ 2011-02-14 15:03
AlexCheng
阅读(434)
推荐(0)
摘要:
问题 你想在场景中同时使用多个光源。 一个方法是使用多个光源绘制场景并将每个光源的影响混合在一起。当添加一个新光源时场景需要整个被重新绘制,这个方法无法拓展,因为帧频率会随着光源的增加按比例下降。 解决方案 本教程中将使用一个完全不同的方法。你将3D场景绘制到一张2D纹理中。然后,为这张纹理中的所有像素计算所有光源的光照。这意味着你要在2D纹理上进行逐像素的处理,但只需绘制3D场景一次。 ...
阅读全文
posted @ 2011-02-14 15:01
AlexCheng
阅读(396)
推荐(0)
摘要:
问题 你想使用自定义的HLSL effect在场景中添加镜面高光。镜面高光是位于反光位置的高亮度区域,如图6-11所示。 解决方案 下面的讨论将帮助你判断哪个像素具有高光分量。 图6-11的左图显示了一条光线L,从光源指向三角形中的一个像素。在左图中还显示了 eye向量,从相机指向像素。如果L的反射向量与E相同,那么这个像素就有一个高光分量。 图6-11 使用靠近eye向量的光线...
阅读全文
posted @ 2011-02-14 14:52
AlexCheng
阅读(489)
推荐(0)
摘要:
问题 前面教程中定义的点光源从一个点发出四面八方的光。你想定义一个聚光灯,它与点光源很很像,但光线只照亮一个圆锥区域,如图6-10。 图6-10 定义一个聚光灯的变量 解决方案 在pixel shader中,判断当前像素是否在光照圆锥中,这可以通过将光线方向和圆锥方向进行点乘做到。 工作原理 开始的代码与前面的教程中的是一样的。因为聚光灯比点光源需要设置的东西更多,你需要将下列X...
阅读全文
posted @ 2011-02-14 14:50
AlexCheng
阅读(403)
推荐(0)
摘要:
问题 如教程6-3所示,要获得最好的光照效果应该使用逐像素光照,特别是对那些由大三角形构成的曲线的情况中。你想使用自己的effect添加逐像素光照。 解决方案 前两个教程中,你在每个顶点中计算明暗值(shading value,也可以翻译成着色值)。三角形三个顶点的明暗值会进行线性以获取每个像素的明暗值。 在逐像素光照中,你想对三个顶点的法线进行插值以获取每个像素的法线,这样就可以基于每个...
阅读全文
posted @ 2011-02-14 14:48
AlexCheng
阅读(413)
推荐(0)
摘要:
问题 直到现在,你都是用单向光照亮场景,这对在3D世界中添加阳光是很有用的。但很多情况中,你还需要一个从点发出的光线,例如一个探照灯或爆炸。这种光源叫做点光源。 解决方案 将点光源的3D位置从XNA项目传送到XNA effect中。对每个顶点,计算光源指向顶点的方向,并将这个方向作为光线方向。知道了光线方向就可以像以前一样继续了。 工作原理 在. fx文件中,使用下列代码替换xLight...
阅读全文
posted @ 2011-02-14 14:47
AlexCheng
阅读(543)
推荐(0)