摘要:
问题 当你使用教材4-1中的代码将一个模型加载到XNA项目时,你使用的是一个BasicEffect实例。在简单的情况下BasicEffect可以很好地绘制模型,当我们常常想使用一个不同的,自定义的effect绘制一个模型。 解决方案 通过将模型的effect包含在BasicEffect对象中,你可以获取effect的所有信息,诸如纹理和材质等信息。当你将这些属性复制到某个安全的地方后,就可以...
阅读全文
posted @ 2011-01-15 10:35
AlexCheng
阅读(439)
推荐(0)
摘要:
问题 当从磁盘载入模型时,往往会太大或太小,你想将模型缩放到定义的大小。 解决方案 首先你需要定义一个模型的全局包围球,前面一个教程已经解释了。知道了这个包围球,你就可以知道模型的当前尺寸了。从这个尺寸,你可以知道需要将模型放大或所小多少。你也可以将这个缩放操作储存在root Bone矩阵中,这样缩放会施加到模型中所有Bone的所有矩阵上(可见教程4-9)。 工作原理 通常,你使用的模型...
阅读全文
posted @ 2011-01-15 10:31
AlexCheng
阅读(431)
推荐(0)
摘要:
问题 模型的包围球是完整包围模型的最小球体。在很多情况中,例如碰撞检测,判断大小等,使用包围球是非常有用的。 解决方案 你可以访问模型中的每个ModelMesh的包围球。使用CreateMerged方法,你可以将这个包围球组合起来,获取包围整个模型的包围球。 但是,因为每个ModelMesh的包围球是相对于Bone矩阵定义的,所以你需要进行转换。 工作原理 你将创建一个方法将一个素材加载到一个模型...
阅读全文
posted @ 2011-01-15 10:01
AlexCheng
阅读(422)
推荐(0)
摘要:
ACCESS数据库 1:CodeSmith选中链接类型是:ADOXSchema 2:无密码的Access链接为: Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\hh\db.mdb; 3:有密码的Access链接: Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\hh\db.m...
阅读全文
posted @ 2011-01-05 22:09
AlexCheng
阅读(280)
推荐(0)
摘要:
问题 你想让模型能够漂亮的加速而不是从静止直接提高到最大速度。图4-9显示了你想实现的这种加速过程。 图4-9 模型的速度时间图像 解决方案 通过添加加速度,你可以定义你的模型的速度变化有多快。加速度就是每帧速度的增加量。 工作原理 你需要保存模型的位置和旋转,这是因为你需要知道哪个方向是向前的。在本例中,你只是让模型绕着它的向上的y轴旋转并沿着X和Z轴移动。如果你想让模型只基于X和Z轴沿着一个...
阅读全文
posted @ 2011-01-05 14:24
AlexCheng
阅读(475)
推荐(0)
摘要:
问题 通过绘制模型前设置世界矩阵(见前一个教程)时,你可以在场景的任意位置放置模型。当你将模型从A点移至B点,你需要确保它转向正确的方向。 这个旋转角通常通过一个自然的方式获取,例如,当处理一个包含旋转的世界矩阵。但是,如果你只是存储模型的前一个位置和当前位置的方法移动模型的话,那么必须手动旋转这个模型。 解决方案 你需要首先计算模型运动的方向。从这个方向的X轴和Z轴开始,很容易找到这个角度。 工...
阅读全文
posted @ 2010-12-08 14:06
AlexCheng
阅读(591)
推荐(0)
摘要:
问题 你想在绘制模型之前独立地移动、旋转并/或缩放它们。 解决方案 你可以设置对象的世界矩阵实现这个功能,而矩阵是可以存储任何变换(平移、旋转或缩放等操作)的对象。你可以简单地使用XNA框架提供的基本方法创建一个变换矩阵: Matrix.CreateTranslation Matrix.CreateScale Matrix.CreateRotationX-Y-Z 第一个...
阅读全文
posted @ 2010-12-08 14:04
AlexCheng
阅读(487)
推荐(0)
摘要:
问题 因为手动定义一个复杂3D对象的所有点几乎是不可能的,所以这些3D对象应该是由艺术家在3D建模程序中制作,模型可以保存为一个文件。你想从文件加载模型并在场景中绘制这个模型。 解决方案 XNA Framework已经包含了所需方法。XNA提供了一个默认的Model素材管道可以从.x和.fbx文件加载模型。如教程3-1的图片所示,你只需将模型拖动到Solution Explorer的Content...
阅读全文
posted @ 2010-12-08 14:00
AlexCheng
阅读(311)
推荐(0)
摘要:
创建一面镜子:投影纹理 问题 你想在场景中创建一面镜子。例如,在一个赛车游戏中创建一面后视镜。你也可以使用这个技术创建一个反射贴图。 解决方案 首先需要将镜子中看到的场景绘制到一张纹理中。然后,绘制相机中见到的场景(包括空镜子),最后将这张纹理贴在镜子上。 要绘制从镜中看起来的场景,你需要定义第二个相机,叫做镜像相机(mirror camera)。你可以通过镜像第一个普通相机的Position,T...
阅读全文
posted @ 2010-12-08 13:57
AlexCheng
阅读(522)
推荐(0)
摘要:
问题 你想在3D世界中创建一个漂亮的3D爆炸效果。 解决方案 你可以通过混合大量的小火焰图像(叫做粒子)创建一个爆炸效果,,如图3-22所示。注意一个单独的粒子很暗,但是,如果你添加大量的粒子,就会获得一个漂亮的爆炸效果。 图3-22 单个爆炸粒子 在爆炸的开始阶段,所有粒子都位于爆炸的初始位置,因为所有图像的颜色都叠加在了一起,所以会形成一个明亮的火球,绘制粒子时你需要使用additive b...
阅读全文
posted @ 2010-12-04 14:22
AlexCheng
阅读(689)
推荐(0)