3D赛车游戏的设计与实现 - 图文(8)

2019-04-02 12:23

湖南大学毕业论文 第29页

万个三角形面,也只需要比较20次左右,效率非常高。碰撞检测示例如图 4-7所示:

图 4-7 BSP碰撞检测示例(上面的文字显示当前已碰撞)

4.2本文采用的碰撞检测技术

碰撞检测是要根据具体的情况来决定选用哪种检测方法,在本文中我们的场景是通过两个X模型来实现,一个是环形赛道模型,一个是赛道周围环境的模型。通过分析这两个模型,我们发现在碰撞检测中最常用的包围盒技术不能用在本游戏中,但在研究包围盒技术中学到的思想可以帮助我们解决这个问题。我们可以可以把赛车看成一个点,为了使赛车不穿透地形,在设置赛车下一位置的坐标时,我们可以取得该坐标,并判断该坐标点位于哪个三角形内,修改该坐标的Y值,确保其始终在地形之上。在介绍本文采用的地形碰撞检测时,有必要

湖南大学毕业论文 第30页

要先了解DirectX是如何加载X模型文件中的信息的,特别是如何确定网格中的每个三角形的。 4.2.1 顶点/索引缓冲区

在Direct3D中的顶点包含了许多附加的属性,而不再单纯的只有空间位置的信息[9]。例如:一个顶点可以有颜色、法线向量属性和纹理坐标,如图4-8

图4-8 顶点结构

一个顶点缓冲区是一块连续的存储了顶点数据的内存,同样的,一个索引缓冲区是一块连续存储了索引数据的内存。我们使用顶点和索引缓存区保存我们的数据是应为它们能被放置在显存中。渲染显存中的数据要比渲染系统能够内存中的数据快的多。

在我们调用DirectX完成加载X模型时,会把模型的顶点信息和索引信息放在其顶点缓冲区和索引缓冲区中,我们可以自定义一个顶点

湖南大学毕业论文 第31页

缓冲区和索引缓冲区接受模型的顶点和索引数据,随后可以对这些数据进行操作。 4.2.2 地形的碰撞检测

从几何形态来看,不同的地形外貌,取决于地形的每一个点距离地形面的高度值。一般地形都是根据高度图生成,高度图其实就是一个数组,其中的每一个元素都表示在地形网格中的一个顶点的高度。我们通常将张高度图当作是一个矩阵来处理,这样以便其中的每项都与地形网格的每一个顶点一一对应。地形高度由高度图的灰度值决定,这样就容易的生成一个地形网格,

我们知道一个场景是模型的集合,一个模型可以用网格(Mesh)来近似的表示。如图4-9:

湖南大学毕业论文 第32页

图4-9 模型

地形跟踪算法和汽车的物理模型是彼此相关的,问题是这样的:我们使用相机来表示玩家的视点(当然,相机前面是预先渲染好的小型汽车)。玩家驾驶的汽车必须在地形表面,而不能穿入地面,因此需要计算相机所在位置处的地形高度,并将视点相应地往上移[10],如图4-10所示:

湖南大学毕业论文 第33页

图4-10 地形跟踪算法

解决这种问题的方法很多。可以为汽车创建一个真正的考虑了动量的物理模型,但对于这样简单的问题,这过于复杂。也可以走另一个极端,根据相机所在单元格的最大高度上下移动相机,但效果不会太好。可以走一条中间路线:使用一个基于速度、重力和瞬时加速度的简化物理模型,其中瞬时加速度取决于相机的位置和方向。这个物理模型的要点如下:

1. 汽车有前进速度和前进方向,可使用箭头键来控制它们(玩家按住前进方向键或后退方向键时,加速度为常量)。 2. 有一个向上的作用于汽车的法向力,如果汽车在海平面之下,这个力将其往上推。

3. 在任何时候,都根据沙地汽车在世界坐标空间中的位置来确定它在哪个地形单元格之上,并计算该单元格4个顶点的平均高


3D赛车游戏的设计与实现 - 图文(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:大学英语1复习资料

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: