摘要:
2.9 只绘制在相机视野中的物体:八叉树 问题 如果你使用教程2-5的方法检查相机视野中的每个模型,那么由于网格太多会极大地拖慢程序。你需要一个可扩展的方法决定场景的哪些部分需要被绘制。 解决方案 定义一个很大的立方体包含整个3D世界和所有模型。如果这个立方体包含太多模型,那么把这个立方体分割成小的子立方体。如果这些小的子立方体包含太多模型,那么再把这些立方体分割成更小的子立方体,直到立方...
阅读全文
posted @ 2010-10-23 09:35
AlexCheng
阅读(314)
推荐(0)
摘要:
2.8 天空盒 问题 你想在游戏中中添加一个场景,而不是单一颜色的背景。 解决方案 你用不着将物体充满场景的每个部分,只需简单地绘制一个很大的立方体,在立方体内部的六个面上贴上风景或房子内部的纹理,然后把相机放在立方体内部。 工作原理 有几种方法可以将一个天空盒放置在场景中,最简单的方法是导入一个模型文件,这个文件拥有自己的纹理和effect。如果你想获得完全控制权,你也可以自己定义一...
阅读全文
posted @ 2010-10-23 09:28
AlexCheng
阅读(673)
推荐(0)
摘要:
2.7 创建一个相机飞入效果 问题 你想平滑地将相机从一个位置移动到另一个位置,当然你也让相机的观察目标也能平滑地移动。 具体的的说,你想要一个功能让相机能沿着一条平滑的曲线从开始位置到结束位置。这个移动过程应该是平滑的,在过程结束后,你想让相机回到常规状态,将它作为一个第一人称相机。 解决方案 这个过程需要一个时间变量,当相机在开始位置时这个变量为0,到达结束位置时为1。 通过指定第...
阅读全文
posted @ 2010-10-23 09:26
AlexCheng
阅读(444)
推荐(0)
摘要:
2.6 检测相机与模型,墙或地形的碰撞 问题 你想检测相机是否已近靠近物体防止它穿过这个物体。 解决方案 要进行相机和模型的碰撞检测,你应将相机表示为一个包围球,使用这个包围球检查与模型的包围球或包围盒的碰撞。对应用户自定义的网格,诸如墙或地形,你必须首先找到墙或地形上的三角形任意位置的精确3D坐标。 工作原理 相机碰撞可分为与模型的碰撞和与已知顶点高度的三角形网格的碰撞。 相机与模...
阅读全文
posted @ 2010-10-23 09:17
AlexCheng
阅读(406)
推荐(0)
摘要:
2.5 检查对象是否可见 问题 你想检查对象是否可见来决定是否要绘制这个物体。 解决方案 XNA拥有BoundingFrustum类支持这个功能,你可以通过传递View和Projection矩阵创建一个BoundingFrustum类,然后就可以很容易地在这个类中检查对象是否包含在视锥体中。 工作原理 视锥体定义了相机可以看到的范围,类似于削去顶部的金字塔,如图2-4所示,它的边是由视...
阅读全文
posted @ 2010-10-18 21:32
AlexCheng
阅读(436)
推荐(0)
摘要:
2.3 创建一个第一人称射击游戏(FPS)的相机:Quake风格的相机 问题 你想创建一个类似于第一人称射击游戏的相机。你想使用鼠标旋转相机,使用键盘移动相机。 解决方案 首先使用教程2-2中的方法,只要检测到用户输入就更新相机的位置和旋转。相机的旋转矩阵会根据鼠标的移动进行改变,按Up或Down键让相机前后移动,按Left或Right键左右移动。 工作原理 通常,在FPS游戏中,玩家可以自由地...
阅读全文
posted @ 2010-10-18 21:17
AlexCheng
阅读(437)
推荐(0)
摘要:
2.4 创建一个Freelancer风格的相机:使用四元数的3D旋转 问题 译者注:《Freelancer》应该是指Digital Anvil制作,微软发行的游戏,中文译名《自由枪骑兵》,好像曾获2003年E3大展最佳PC游戏奖,是一个太空冒险游戏。 你想创建一个可以朝任意方向旋转的相机,例如,一个空战游戏。你需要能绕着三根轴旋转才能实现这点,但是因为万向节锁(Gimbal lock)(一...
阅读全文
posted @ 2010-10-18 21:15
AlexCheng
阅读(428)
推荐(0)
摘要:
2.2 指定相机的目标 问题 当定义View矩阵时,你需要指定Target向量作为参数,这个向量设置了相机的旋转。 解决方案 当选转相机时,相机的位置会保持不变。这意味着旋转取决于相机的Target点和Up向量的变化。你可以通过使用 (0,0,-1)Forward向量并将旋转施加到这个向量上获取Target向量,这会产生一个新的Target点。你可以使用相同的方法获取Up向量。 工作原理...
阅读全文
posted @ 2010-10-18 21:05
AlexCheng
阅读(487)
推荐(0)
摘要:
2.1 创建一个相机:Position,Target和View Frustum 问题 在将3D世界绘制到屏幕之前,你需要相机的View和Projection矩阵。 解决方案 你可以在一个矩阵中保存相机位置和方向,这个矩阵叫做View矩阵(视矩阵,观察矩阵)。要创建View矩阵,XNA需要知道相机的Position,Target和Up矢量。 你也可以保存视锥体(view frustum),...
阅读全文
posted @ 2010-10-17 20:35
AlexCheng
阅读(774)
推荐(0)
摘要:
1.9 将数据保存到文件,从文件读取数据 问题 你需要在游戏中实现保存功能。解决方案虽然保存功能通常是创建游戏的最后一步,但你肯定需要在游戏中实现这个功能。首先,XNA使用默认的.NET文件I/O 功能,这意味着创建/打开/删除文件是很容易的。接着,使用XmlSerializer类能非常容易地将数据保存到文件并在以后加载数据。 唯一的问题是找到在PC平台和Xbox360平台都能保存的位置,要...
阅读全文
posted @ 2010-10-17 20:24
AlexCheng
阅读(314)
推荐(0)