资源描述:
《3d射击游戏 设计文档》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、3D射击游戏项目论文3D射击游戏项目论文1一、项目背景3二、项目目的及主要内容3三、主要类图4四、系统用例及分析4五、系统分析与设计5六、主要负责部分6七、参考资料11一、项目背景随着计算机硬件的急速发展以及3D技术的兴起,2D游戏已经不能引起玩家的兴趣,3D游戏已经成为趋势。现在很多3D游戏很具有娱乐性,但是其操作复杂,使玩家将娱乐变成一种竞技,因此,本论文致力于开发一款高娱乐性,且操作简单的3D游戏。其特点为:1、游戏的场景为模拟现实的3D场景,具有碰撞检测,从而实现高度真实感,使玩家容易融入游戏之中
2、。2、游戏操作简单,鼠标左键射击,鼠标控制准星,键盘控制人物。3、游戏玩家为普通大众,无年龄,技术等要求。二、项目目的及主要内容本项目的目的为建立至少一个3D游戏场景,加载人物模型,是玩家能控制游戏中的一个角色与计算机控制是机器人进行火拼,玩家可以切换武器(同时携带冲锋枪及手枪)。游戏模拟一种真实的战斗场面,使玩家有身临其境的感觉。1、游戏场景的创建。使用OpenGL绘制3D场景,至少创建一个,如果有多个则可供玩家选择。2、人物模型的控制。游戏模型分为MDL和MD2两种格式。玩家使用的角色为MDL格式的骨
3、骼模型,该模型具有高仿真性。机器人为MD2格式模型,该模型不具有MDL格式的高仿真性,但因其格式规范,便于统一控制。3、游戏为了具有高度真实性,应实现碰撞检测,包括(任务与场景边界、障碍物的碰撞检测,子弹与人物的碰撞检测,子弹与场景边界的碰撞检测),检测到碰撞后应产生一定效果。三、主要类图本项目采用面向对象的方法开发,为达到项目目标,项目使用了多个类,主要类图如下:图一、类图四、系统用例及分析玩家是本项目的参与者,玩家在游戏中可以实现漫游,射击,添加机器人等操作,也可以修改游戏设置,如游戏角色持枪方式(左
4、手持枪或右手持枪),游戏中机器人最大数,鼠标的灵敏度等。用例图如下:图二、用例图五、系统分析与设计系统可划分为:基础框架模块,模型控制模块,碰撞检测模块。结构图如下:射击游戏基础框架场景绘制摄像机控制碰撞检测模型与场景子弹与场景子弹与模型模型控制机器人的控制玩家角色控制游戏菜单图三、系统模块图六、主要负责部分在本项目中,我主要负责三维场景搭建,模型载入与控制,游戏菜单及游戏设置部分。1)三维场景搭建2)本游戏场景如图所示:①④⑤②①③④③⑤⑤⑤⑤⑤图四、场景简图图例:①小房间②大房间③集装箱1④集装箱2两
5、种集装箱大小高度均不同⑤木箱注释:图中所有物体均在同一平面,只有③上面的两个④是放在③上面的。基本思路:将场景绘制封装成类,该类通过Init()函数调用纹理贴图类的成员函数,将绘制场景所需的所有位图载入并生成纹理ID。使用OpenGL库中绘制平面的函数绘制所有物体,并贴上相应的纹理。在绘制场景的时候把所有物体的底面定点坐标以及物体高度保存为文件,用于以后的碰撞检测。场景搭建及与场景相关碰撞检测封装为类,其主要成员函数有:VoidInit();//载入绘制场景需要的位图VoidDrawLongBox(flo
6、atxPos,floatyPos,floatzPos);//绘制集装1VoidDrawLongBox1(floatxPos,floatyPos,floatzPos);//绘制集装箱2VoidDrawTextureCube(floatxPos,floatyPos,floatzPos);//绘制木箱子VoidDrawHouse();//绘制中间的大房间VoidDrawSmallHouse(floatxPos,floatyPos,floatzPos);//绘制两端的房子VoidRender();//对外接口,调
7、用绘制函数,完成场景绘制voidSetPlane(inti,floatx1,floatz1,floatx2,floatz2,floathei);//读取地图文件,用于做碰撞检测BoolCollisionCheck_Model(Vector3New_Pos,Vector3OldPos,floathei,floatModSize);//模型与场景的碰撞检测VoidZangan_Model(Vector3*NewPos,Vector3*OldPos,floathei,floatModSize);//检测到碰撞后
8、的绕行策略floatGetHeight(Vector3Pos);//获取场景某一位置的高度1)模型载入与控制在本项目开发过程中,最开始载入的是MD2格式的模型,载入模型的代码是从网上下载的案例中精简出来的。由于后来发现MDL格式骨骼模型具有更高的仿真性(现在市面上的游戏基本上都是使用MDL格式的模型),因此放弃了对MD2模型的控制,改为对MDL模型的控制。但是MDL格式模型的缺点是不具有统一的存储风格(不同模型的统一状态保存的