论文总字数:21930字
摘 要
3D游戏就是三维游戏,3D中的D是Dimension(维)的缩写。本程序为使用DirectX技术实现的3D游戏Demo版,C 编写,采用Win32架构消息循环机制,可以在WindowsXP及以上系统流畅运行,无任何BUG。本程序使用了多种编程技术,如多线程技术和动态脚本技术,在渲染方面,使用了HLSL(高级着色语言)shader技术。本程序使用的设计模式有工厂模式和单件模式,有效地保证了资源和类的管理,保证了程序的质量。本游戏主要实现了天空盒子、水面倒影(折射、反射)、截投体(摄像机视锥)优化模块、地图场景优化模块、射线相交碰撞检测模块、Python脚本语言调用、输入管理模块和粒子系统,在室内场景优化(BSP)方面做了一些尝试,但是没有成功,还需要进一步的研究。
关键字:3D游戏,Win32,多线程,HLSL,脚本。
Abstract:The full name of 3D-Game is "3 Dimensions Game", the "D" refers to Dimensions. This program is a 3D game demo compiled by DirectX and C ,message cycle mechanism of Win32.It can run well on the system Windows XP and higher without any bug. This program is compiled by several technologies,such as multi-thread and dynamic scripts. The shader of rendering is HLSL(High Level Shader Language).The design pattern of it includes factory and singleton, it can ensure the management of resources and classes, and the quality of the program further.
This game has completed the Sky-Box, the Refraction and Reflaction of Water, the Frustum optimization, the Terrain optimization, the Ray-Cast Monitor, the Particles and call Python script. I have attempted to accomplish the BSP(Binary Space Partitioning),but it failed, and I think I should pay more effort on it.
Key words: 3 Dimension Game, Win32, multi-thread,HLSL,script.
目录
1 背景 5
1.1 电脑游戏及3D游戏发展史 5
1.2 3D游戏的几种实现技术 6
1.3 DirectX简介 7
2 游戏Demo设计 8
2.1 程序流程图 8
2.2 功能与构成 9
2.3 数据流图 9
2.4 程序开发与运行环境 10
3 关键技术与代码 10
3.1 多线程技术 10
3.2 截投体、四叉树LOD地图优化 13
3.3 碰撞检测 16
3.4 节点绑定与更新 18
3.5 渲染到纹理(RTT)技术 19
3.6 水面反射与折射 19
3.7 公告板(BillBoard) 21
3.8 昵称显示与透明处理 23
3.9 高级着色器语言HLSL 25
3.10 Python脚本调用 26
4 测试 30
4.1 游戏测试结果 30
4.2测试结果分析 30
1 背景
1.1 电脑游戏及3D游戏发展史
20世纪60年代,电子计算机进入了美国大学校园,那是一个编程高手崭露头角的年代。1962年的时候,一位叫斯蒂夫·拉塞尔的大学生编写了世界上第一款电脑游戏——《宇宙战争》(Space War),这个游戏在当时相当有名,是在PDP-1型电子计算机上编写的(美国DEC公司生产)[1]。
当今社会一般认为,是斯蒂夫·拉塞尔发明了电脑游戏。
进入20世纪70年代,电脑游戏的开发成本越来越低,这全得益于计算机技术的快速发展。1971年,诺兰·布什内尔发明了第一台商业化的电子游戏机,因此被誉为“电子游戏之父”。不久后,世界上第一家游戏公司雅达利公司(ATARI)成立了,该公司正是由诺兰·布什内尔创办的。
苹果电脑的问世真正带领着电脑游戏走上了商业化的道路,受限于当时的技术水平,虽然电脑游戏的图形效果非常简陋,但是电脑游戏已经开始有了初步的类型划分。
从上世纪80年代开始,PC机(个人电脑)普及,多媒体技术也日渐成熟,电脑游戏首先应用了这些在当时先进的技术,特别是在3dfx发起的3D显示卡行业革命后,图像显示发生了巨大的变化,电脑游戏开始渐渐走向辉煌。
进入20世纪90年代,计算机硬件和软件技术快速发展,互联网的广泛使用成为了电脑游戏发展的强大动力,以至于进入了21世纪,网络游戏很快就成为了电脑游戏发展的新方向。
3D游戏就是三维游戏[2],3D中的D是Dimension(维)的缩写。在三维游戏中,一个点的位置是由三个坐标(x,y,z)决定的,这个规则与空间几何学是一样的——我们所处的现实空间就是三维空间,具有长、宽、高三种度量,这是一个无法否认的客观事实。
三维游戏(3D游戏,也被称为立体游戏)是相对于二维游戏(2D游戏,也被称为平面游戏)而言的,因为3D游戏采用了空间坐标的立体概念,所以更接近现实生活,对空间的操作也具有更强的随意性,因此更容易引起玩家的关注与兴趣。
对于显卡的运算速度和内存容量,3D游戏比2D游戏的要求更高,如果硬件的性能无法满足要求,游戏运行的时候就会非常缓慢,甚至导致系统崩溃。
电脑的独立显卡是相对于集成显卡而言的,顾名思义,集成显卡就是集成在主板上的显卡。独立显卡具有相对于集成显卡更好的GPU,最主要的是独立显卡有自己独立的内存,而集成显卡则要分享系统的内存,因此独立显卡比集成显卡具有更好的游戏性能,支持更多更绚丽的特效,使得游戏的流畅性和精彩性有了更大的提高。
近年来科技快速发展,计算机、智能手机等各平台的高度普及给3D游戏提供了广泛的载体。中国的3D游戏起步较晚,技术却已经相对成熟,游戏产业是当前中国的热门产业和朝阳产业,有着光明的发展前景。
1.2 3D游戏的几种实现技术
DirectX:DirectX[3],(Direct eXtension,简称DX)是由微软公司创建的多媒体编程接口,由C 编程语言实现,遵循COM(组件对象模型),被广泛使用于Microsoft Windows、Microsoft XBOX、Microsoft XBOX 360和Microsoft XBOX ONE电子游戏开发,并且只能支持这些平台,其最新版本为DirectX 12,创建在最新的Windows 8.1上。
微软公司一直致力于使基于Windows 系统的计算机成为能够运行和显示具有丰富多媒体元素(例如全色图形、视频、3D 动画和丰富音频)的应用程序的理想平台,Microsoft DirectX技术的宗旨正是为微软公司实现这一目标而服务。
DirectX 包括安全和性能更新程序,以及许多涵盖所有技术的新功能,它提供了强大的DirectX API,以供应用程序访问这些新功能。
DirectX加强了3D图形和声音的效果,并提供了一个共同的硬件驱动标准供设计人员使用,让游戏开发人员跳过了为不同品牌的硬件来编写相应的驱动程序这一复杂的环节,也解决了用户安装设置硬件太过复杂的问题。
从字面意义上说,Direct就是直接的意思,而后边的X则代表了很多的意思,从这一点上可以看出DirectX的出现就是为了为众多软件提供直接服务的。
举例来说,以前在DOS系统下的骨灰级玩家玩游戏时,并不是安装上游戏就可以玩了,他们往往首先要设置声卡的品牌和型号,然后还要设置IRQ(中断)、I/O(输入与输出)、DMA(存取模式),如果有一项设置的不对,那么游戏就无法发出声音。这部分的设置不但让玩家伤透脑筋,对游戏开发者来说更是痛苦万分——为了让游戏能够在众多电脑中正确运行,开发者必须在游戏制作之初就把市面上所有声卡硬件数据都收集过来,然后根据不同的 API(应用编程接口)来编写不同的驱动程序。这对于游戏制作公司来说是一项很难完成的任务,所以在当时多媒体游戏很少。微软正是注意到了这个问题,为众多硬件厂家推出了一个共同的应用程序接口——DirectX,只要游戏是依照DirectX来开发的,使用的显卡、声卡的驱动程序也支持DirectX,不管显卡、声卡型号如何,不仅统统都能使用,而且还能发挥最佳的效果。
OpenGL:OpenGL[4](全写Open Graphics Library)定义了一个跨编程语言、跨平台的编程接口的规格,它用于处理三维图象,二维图像当然也不在话下。OpenGL的英文全称是“Open Graphics Library”,顾名思义,OpenGL便是“开放的图形程序接口”。
OpenGL是一个专业的图形程序接口的底层图形库,功能非常强大,调用也很方便。OpenGL 是行业领域中最为广泛接纳的2D/3D图形 API, 其自诞生至今已催生了各种计算机平台及设备上的数千优秀应用程序,虽然DirectX在家用市场全面领先,但在专业高端绘图领域,OpenGL是不能被取代的主角。
很多著名的游戏引擎如Cocos系列正是基于OpenGL技术开发而成的。
OpenGL是个与硬件无关的软件接口,可以在不同的平台如Windows 95、Windows NT、Unix、Linux、MacOS、OS/2之间进行移植。因此,支持OpenGL的软件具有很好的移植性,可以获得非常广泛的应用。
OpenGL被设计为只有输出的,所以它只提供渲染功能,独立于视窗操作系统或其它操作系统的,亦是网络透明的。OpenGL的核心API没有窗口系统、音频、打印、键盘/鼠标或其它输入设备的概念。虽然这一开始看起来像是一种限制,但它允许进行渲染的代码完全独立于他运行的操作系统,允许跨平台开发。然而,有些整合于原生窗口系统的东西需要允许和宿主系统交互。
目前,随着DirectX的不断发展和完善,OpenGL的优势逐渐丧失,至今虽然已有3Dlabs提倡开发的2.0版本面世,在其中加入了很多类似于DirectX中可编程单元的设计,但厂商和用户的认知程度并不高,未来的OpenGL发展前景迷茫。
1.3 DirectX简介
微软公司一直致力于使基于Windows 系统的计算机成为能够运行和显示具有丰富多媒体元素(例如全色图形、视频、3D 动画和丰富音频)的应用程序的理想平台,Microsoft DirectX[3]技术的宗旨正是为微软公司实现这一目标而服务。
DirectX 包括安全和性能更新程序,以及许多涵盖所有技术的新功能,它提供了强大的DirectX API,以供应用程序访问这些新功能。
DirectX加强了3D图形和声音的效果,并提供了一个共同的硬件驱动标准供设计人员使用,让游戏开发人员跳过了为不同品牌的硬件来编写相应的驱动程序这一复杂的环节,也解决了用户安装设置硬件太过复杂的问题。
DirectX是由很多API组成的,按照性质分类,可以分为四大部分,显示部分、声音部分、输入部分和网络部分。
显示部分:显示部分是负责图形处理的关键,分为DirectDraw(DDraw)和Direct3D(D3D),前者主要负责2D图像加速,后者则主要负责3D效果的显示。DirectDraw包括很多方面:我们播放MPG、DVD电影、看图、玩小游戏等等都依赖于它,你可以简单地理解为所有画线的部分都是用的DDraw。Direct3D则是为3D效果服务的,比如CS中的场景和人物、FIFA中的人物等等,都是使用了DirectX的Direct3D。
声音部分:声音部分中最主要的API是DirectSound,除了播放声音和处理混音这些最基本的功能之外,它还加强了3d音效,并提供了录音功能。DirectSound功能十分强大,声卡兼容的问题就是利用它来解决的。
输入部分: DirectInput是输入部分,它支持很多的游戏输入设备,除了键盘和鼠标之外还可以连接手柄、摇杆、模拟器等,并能够充分发挥这些设备的最佳状态和全部功能。
网络部分: DirectPlay为网络部分,它为具有网络功能的游戏提供了多种连接方式,例如TCP/IP、IPX、Modem、串口等等,让玩家可以使用各种连网方式进行对战,它也提供网络对话的功能,保密措施也相对完善。
2 游戏Demo设计
2.1 程序流程图
图2-1 程序流程图
2.2 功能与构成
经过系统分析,本程序设计的模块和功能有:
(1)天空盒子(天空背景)模块;
(2)水面倒影(折射、反射)模块;
(3)截投体(摄像机视锥)优化模块;
(4)地图场景优化模块;
(5)射线相交碰撞检测模块;
(6)Python脚本语言调用模块;
(7)摄像机管理模块;
(8)NPC管理模块;
(9)敌人管理模块;
(10)建筑管理模块;
(11)昵称公告板管理模块;
(12)UI管理模块;
(13)输入管理模块;
(14)粒子系统;
2.3 数据流图
游戏流程如下图:
步骤一:运行程序,开始游戏
步骤二:与NPC对话,接受任务
步骤三:寻找任务目标
步骤四:击杀任务目标
步骤五:完成任务
加载资源
接受任务
找到任务目标
剩余内容已隐藏,请支付后下载全文,论文总字数:21930字
该课题毕业论文、开题报告、外文翻译、程序设计、图纸设计等资料可联系客服协助查找;