预览加载中,请您耐心等待几秒...
1/2
2/2

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

82福建电脑脑福建2011年第4期 基于DirectX的羽毛球三维仿真引擎的设计与实现 陈彦,陈启安 (厦门大学计算机科学系福建厦门361005) 【摘要】:本文基于Windows平台下的DirectX技术,将三维仿真应用于羽毛球运动项目。通过对羽 毛球运动项目的观察与分析,概括了羽毛球运动项目的基本要素,并抽象成计算机模拟所需要的元素。设 计并实现了羽毛球仿真引擎BadmintonEmluatorEngine,并基于该引擎实现了羽毛球运动的仿真模型。 【关键词】:DirectX羽毛球仿真引擎 0、引言1.3*.x文件 在中国,羽毛球运动是普及率最高的健身运动之以x为文件扩展名的文件是微软定义的文件格 一。深入研究羽毛球运动,对于提高我国的羽毛球运动式,用来存放3D模型,并且可以有动画键。使用3DS 水平、激发群众对羽毛球运动的喜爱,有着重要意义。MAX三维建模软件可以制作羽毛球场地、羽毛球、运 随着3D技术的不断发展与成熟,3D模拟在医学、建筑动员等3D模型,并导出为.x格式文件,供DirectX程 设计、城市规划、航空航天、计算机仿真技术等领域应序使用。本文使用3DSMAX8.0,按照羽毛球场地、羽 用已经取得了相当可观的进展。将3D技术用于羽毛毛球的实际尺寸,以及运动员的平均身高等数据,以 球飞行轨迹的模拟,是计算机仿真技术的在体育运动300像素/米的比例,构建羽毛球场地、羽毛球以及运动 上的一个创新应用。本文基于Direct3D技术,实现了羽员的三维模型。 毛球仿真所需要的引擎,并基于该引擎实现了羽毛球2、羽毛球仿真引擎的设计与实现 运动的仿真模型,为羽毛球运动的科学研究、3D羽毛引擎是将现实中的物质抽象为多边形或者各种曲 球游戏的开发等,提供重要的依据。线等表现形式,在计算机中进行相关计算并输出最终 1、羽毛球运动分析图像的算法实现的集合。通常来说,引擎作为一种底层 羽毛球运动是一项隔着球网,使用长柄网状球拍工具支持着高层的图形软件开发。可以将引擎看成是 击打平口端扎有一圈羽毛的半球状软木的室内运动。对API的封装,对一些图形通用算法的封装,对一些底 羽毛球运动的计算机模拟所需要素可概括为:羽毛球层工具的封装。 场地、羽毛球、羽毛球运动员。这三个要素都可以用本文基于Windows平台下的DirectX,实现了羽毛 DirectX所支持的*.x文件来描述。球运动仿真所需要的3D引擎,其主要功能包括:设备 1.1场地管理、场景管理、时钟管理、文件解析、事件响应、节点、 羽毛球场成长方形,各条线宽均为4厘米,场地上动画等。 空12米以内和四周4米以内不应有障碍物。球场中央2.1设备管理 网高1.524米,双打边线处网高1.55米。设备管理提供了仿真引擎与Windows平台以及 羽毛球场地标准羽毛球场为一长方形场地,长度DirectX相联系的功能。设备管理类BEEDevice是一个 为13.40米,双打场地宽为6.10米,单打场地宽为5.18单例,通过调用该类的静态方法得到BEEDevice的一 米。球场上各条线宽均为4厘米,丈量时要从线的外沿个实例,可以调用以下方法: 算起。球场界限最好用白色、黄色或其它易于识别的颜a.createDevice():提供宽度、高度、全屏、窗体名称等 色画出。按国际比赛规定,整个球场上空空间最低为参数,创建Windows窗体; 9米,在这个高度以内,不得有任何横梁或其它障碍b.createD3Ddevice():初始化Direct3D设备; 物,球场四周2米以内不得有任何障碍物。任何并列的c.setEventHandler():基于回调函数的方法,自定义 两个球场之间,最少应有2米的距离。球场四周的墙壁消息处理器; 最好为深色,不能有风。d.run:主消息循环; 1.2羽毛球e.beginScene():清屏,清除后备缓冲区、z缓冲区、模 球重4.74克~5.5克,由16根羽毛插在半球型软木版缓冲区等; 托上,球高68-78毫米,直径58-68毫米,分为1-10f.endScene():按照设备拥有的后台缓冲区的顺序, 号。在显示器上呈现下一个缓冲区的内容。 2011年第4期福建电脑83 2.2场景管理a.draw():绘图函数,纯虚函数,由各个子类重载实 场景管理器BEESceneManager同样是单例模式,现,并由场景管理器BEESceneManager调用; 提供了包括场景节点管理、摄像机设置、灯光设置、透b.setPosition():设置节点的空间坐标,初始坐标为 视投影设置、雾化效果等。场景管理器保存了一个场景(0,0,0); 节点的队列,并且在每一帧清屏之后,调用drawAll()方c.move():平移函数,将节点平移(x,y,z)距离; 法来绘制场景节点。d.