《《游戏软件开发》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《游戏软件开发》PPT课件.ppt(52页珍藏版)》请在三一办公上搜索。
1、游戏软件开发,第一章 DirectX简介,一、什么是DirectX DirectX,(Direct eXtension,简称DX)是由微软公司创建的多媒体编程接口。由C+编程语言实现,遵循COM。被广泛使用于Microsoft Windows、Microsoft Xbox和Microsoft Xbox 360电子游戏开发,并且只能支持这些平台。最新版本为DirectX 11.1,创建在最新的Windows 8上。,第一章 DirectX简介,二、功能 DirectX加强3D图形和声音效果,并提供设计人员一个共同的硬件驱动标准,让游戏开发者不必为每一品牌的硬件来写不同的驱动程序,也降低了用户安装
2、及设置硬件的复杂度。从字面意义上说,Direct就是直接的意思,而后边的X则代表了很多的意思,从这一点上可以看出DirectX的出现就是为了为众多软件提供直接服务的。,第一章 DirectX简介,三、组成 DirectX是由很多API组成的,按照性质分类,可以分为四大部分,显示部分、声音部分、输入部分和网络部分。,第一章 DirectX简介,三、组成 1、显示部分 显示部分担任图形处理的关键,分为DirectDraw(DDraw)和Direct3D(D3D),前者主要负责2D图像加速。它包括很多方面:我们播放mpg、DVD电影、看图、玩小游戏等等都是用的DDraw,你可以把它理解成所有划线的部
3、分都是用的DDraw。后者则主要负责3D效果的显示,比如CS中的场景和人物、FIFA中的人物等等,都是使用了DirectX的Direct3D,第一章 DirectX简介,三、组成 1、显示部分,第一章 DirectX简介,三、组成 2、声音部分 声音部分中最主要的API是DirectSound,除了播放声音和处理混音之外,还加强了3d音效,并提供了录音功能。,第一章 DirectX简介,三、组成 3、输入部分 输入部分DirectInput可以支持很多的游戏输入设备,它能够让这些设备充分发挥最佳状态和全部功能。除了键盘和鼠标之外还可以连接手柄、摇杆、模拟器等。,第一章 DirectX简介,三、
4、组成 4、网络部分 网络部分DirectPlay主要就是为了具有网络功能游戏而开发的,提供了多种连接方式,TCP/IP,IPX,Modem,串口等等,让玩家可以用各种连网方式来进行对战,此外也提供网络对话功能及保密措施。,第一章 DirectX简介,三、历史1、DirectX 1.0第一代的DirectX很不成功,推出时众多的硬件均不支持,当时基本都采用专业图形APIOpenGL,缺乏硬件的支持成了其流行的最大障碍。2、DirectX 2.0DirectX 2.0在二维图形方面做了些改进,增加了一些动态效果,采用了Direct 3D的技术。这样DirectX 2.0与DirectX 1.0有了
5、相当大的不同。在DirectX 2.0中,采用了“平滑模拟和RGB模拟”两种模拟方式对三维(3D)图像进行加速计算的。DirectX 2.0同时也采用了更加友好的用户设置程序并更正了应用程序接口的许多问题。从DirectX 2.0开始,整个DirectX的设计架构雏形就已基本完成。,第一章 DirectX简介,三、历史 DirectX 3.0的推出是在1997年最后一个版本的Windows95发布后不久,此时3D游戏开始深入人心,DirectX也逐渐得到软硬件厂商的认可。97年时应用程序接口标准共有三个,分别是专业的OpenGL接口,微软的DirectX D接口和3DFX公司的Glide接口。
6、而那时的3DFX公司是最为强大的显卡制造商,它的Glide接口自然也受到最广泛的应用,但随着3DFX公司的没落,Voodoo显卡的衰败,Glide接口才逐渐消失了。DirectX 3.0是DirectX 2.0的简单升级版,它对DirectX 2.0的改动并不多。包括对DirectSound(针对3D声音功能)和DirectPlay(针对游戏/网络)的一些修改和升级。DirectX 3.0集成了较简单的3D效果,还不是很成熟。,第一章 DirectX简介,三、历史 DirectX 5.0微软公司并没有推出DirectX 4.0,而是直接推出了DirectX 5.0。此版本对Direct3D做出
7、了很大的改动,加入了雾化效果、Alpha混合等3D特效,使3D游戏中的空间感和真实感得以增强,还加入了S3的纹理压缩技术。同时,DirectX 5.0在其它各组件方面也有加强,在声卡、游戏控制器方面均做了改进,支持了更多的设备。因此,DirectX发展到DirectX 5.0才真正走向了成熟。此时的DirectX性能完全不逊色于其它3D API,而且大有后来居上之势。,第一章 DirectX简介,三、历史 DirectX 6.0推出时,其最大的竞争对手之一Glide,已逐步走向了没落,而DirectX则得到了大多数厂商的认可。DirectX 6.0中加入了双线性过滤、三线性过滤等优化3D图像质
8、量的技术,游戏中的3D技术逐渐走入成熟阶段。,第一章 DirectX简介,三、历史 DirectX 7.0最大的特色就是支持T&L,中文名称是“坐标转换和光源”。3D游戏中的任何一个物体都有一个坐标,当此物体运动时,它的坐标发生变化,这指的就是坐标转换;3D游戏中除了场景+物体还需要灯光,没有灯光就没有3D物体的表现,无论是实时3D游戏还是3D影像渲染,加上灯光的3D渲染是最消耗资源的。虽然OpenGL中已有相关技术,但此前从未在民用级硬件中出现。在T&L问世之前,位置转换和灯光都需要CPU来计算,CPU速度越快,游戏表现越流畅。使用了T&L功能后,这两种效果的计算用显示卡的GPU来计算,这样
9、就可以把CPU从繁忙的劳动中解脱出来。换句话说,拥有T&L显示卡,使用DirectX 7.0,即使没有高速的CPU,同样能流畅的跑3D游戏。,第一章 DirectX简介,三、历史 DirectX 8.0的推出引发了一场显卡革命,它首次引入了“像素渲染”概念,同时具备像素渲染引擎(Pixel Shader)与顶点渲染引擎(Vertex Shader),反映在特效上就是动态光影效果。同硬件T&L仅仅实现的固定光影转换相比,VS和PS单元的灵活性更大,它使GPU真正成为了可编程的处理器。这意味着程序员可通过它们实现3D场景构建的难度大大降低。通过VS和PS的渲染,可以很容易的营造出真实的水面动态波纹
10、光影效果。此时DirectX的权威地位终于建成。,第一章 DirectX简介,三、历史 DirectX 9.02002年底,微软发布DirectX9.0。DirectX 9中PS单元的渲染精度已达到浮点精度,传统的硬件T&L单元也被取消。全新的VertexShader(顶点着色引擎)编程将比以前复杂得多,新的VertexShader标准增加了流程控制,更多的常量,每个程序的着色指令增加到了1024条。PS 2.0具备完全可编程的架构,能对纹理效果即时演算、动态纹理贴图,还不占用显存,理论上对材质贴图的分辨率的精度提高无限多;另外PS1.4只能支持28个硬件指令,同时操作6个材质,而PS2.0却
11、可以支持160个硬件指令,同时操作16个材质数量,新的高精度浮点数据规格可以使用多重纹理贴图,可操作的指令数可以任意长,电影级别的显示效果轻而易举的实现。,第一章 DirectX简介,三、历史 DirectX 9.0C 与过去的DirectX 9.0b和Shader Model 2.0相比较,DirectX 9.0c最大的改进,便是引入了对Shader Model 3.0(包括Pixel Shader 3.0 和Vertex Shader 3.0两个着色语言规范)的全面支持。举例来说,DirectX 9.0b的Shader Model 2.0所支持的Vertex Shader最大指令数仅为25
12、6个,Pixel Shader最大指令数更是只有96个。而在最新的Shader Model 3.0中,Vertex Shader和Pixel Shader的最大指令数都大幅上升至65535个,全新的动态程序流控制、位移贴图、多渲染目标(MRT)、次表面散射 Subsurface scattering、柔和阴影Soft shadows、环境和地面阴影Environmental and ground shadows、全局照明(Global illumination)等新技术特性,使得GeForce 6、GeForce7系列以及Radeon X1000系列立刻为新一代游戏以及具备无比真实感、幻想般的
13、复杂的数字世界和逼真的角色在影视品质的环境中活动提供强大动力。,第一章 DirectX简介,三、历史 Directx 10.0已经包含在Windows Vista操作系统中,目前无法单独下载使用新的DirectX使你获得更好的图像显示质量,使多人游戏具可伸缩性,以及包括更棒的音频效果。它强化了针对DirectDraw和Direct3D的接口,简化了应用扩展,提升性能;改善了图形创作工具,更易于做出最佳的3-D角色和环境;点光源式光影和像素式光影使图象更逼真;强化了DirectSound和DirectMusic,简化了其应用扩展;DLS2音频合成功能提高了乐器音频的真实感;DirectInput
14、的设备影射功能令对设备的支持更简单;DirectPlay使多人游戏的性能和可扩展性得到了提高;DirectPlay提供了IP声音通讯;DirectShow的应用编程接口提供了音频/视频的实时合成和即时编辑;DirectShow支持Windows媒体音频和视频(WMA和WMV)的读写;Microsoft TV技术可以支持数字电视节目。,第一章 DirectX简介,三、历史 Directx 112009年1月9日星期五,微软将面向公众发布Windows 7客户端Beta 1测试版。而此前一天,即1月8日,微软将率先发布Windows 7服务器版本的Beta 1测试版。Windows 7是微软的下一
15、代操作系统,当前业内普遍认为,微软将在2009年圣诞购物旺季前发布Windows 7正式版。在微软刚刚发布的Windows 7Beta版本中,一些已经安装使用的用户的发现了DirectX 11已经包含其中了。DirectX 11作为3D图形接口,不仅支持未来的DX11硬件,还向下兼容当前的DirectX 10和10.1硬件。DirectX 11增加了新的计算shader技术,可以允许GPU从事更多的通用计算工作,而不仅仅是3D运算,这可以鼓励开发人员更好地将GPU作为并行处理器使用。,第一章 DirectX简介,三、历史 Directx 11.22013年6月28日,微软发布Directx11
16、.2(Alpha版),其中一个重要特性是允许游戏使用系统内存和显存储存纹理数据,微软的Antoine Leblond在BUILD大会上演示了主要利用内存而不是显存去储存9GB纹理数据。这项特性对于未来的高清游戏具有重要意义。然而一个问题是,DirectX 11.2不支持Windows 8及之前操作系统,只支持Windows 8.1和下一代主机Xbox One及Play Station 4。,第一章 DirectX简介,三、历史 XNA美国微软于 8 月 13 日发表针对业余创作者所设计的游戏开发套件XNA Game Studio Express,提供没有专门开发器材的一般 PC Windows
17、 XP 使用者开发跨 Xbox 360 与 PC 平台游戏的管道.XNA是Microsoft的下一代软件开发平台,致力于帮助开发者更快地开发更好的游戏。XNA被微软公司开发,并且开始于多年前,但是保持地非常秘密。在2004年GDC(年度最大的游戏开发讨论会)上微软第一次宣布XNA。XNA不仅仅像DirectX一样是个框架;它还包含很多工具,甚至是一个自定义的IDE。因为直到2006年,还没有一点工具被发布,DirectX的开发者们仅仅在2004到2006年的DirectX SDK文档的右上角标示了“XNA”的图标。,第一章 DirectX简介,四、项目框架,渲染器,状态,控制器,仿真器,第一章
18、 DirectX简介,四、项目框架、程序入口 MainImports SystemImports System.DrawingImports Container=Imports Microsoft.DirectX,第一章 DirectX简介,四、项目框架、程序入口 MainPublic Class MainClass Private Graphics As GraphicsClass=NothingPublic Shared Sub Main()Dim M As New MainClass()End Sub,第一章 DirectX简介,四、项目框架、程序入口 MainPublic Sub Ne
19、w()Try Graphics=New GraphicsClass()Catch E As DirectXException Return End Try If Graphics.CreateGraphicsSample()Then Graphics.Run()End If End SubEnd Class,第一章 DirectX简介,四、项目框架 2、GraphicsClassImports SystemImports System.DrawingImports Imports Microsoft.DirectXPublic Delegate Sub PeerCloseCallback()P
20、ublic Delegate Sub MessageDelegate(Message As Byte),第一章 DirectX简介,四、项目框架 2、GraphicsClassPublic Class GraphicsClass Inherits GraphicsSample Private DrawingFont As GraphicsFont=Nothing Private Destination As Point=New Point(0,0)Private Input As InputClass=Nothing Private Play As PlayClass=Nothing Priv
21、ate Const MsgUp As Byte=0 Private Const MsgDown As Byte=1 Private Const MsgLeft As Byte=2 Private Const MsgRight As Byte=3 Private Const MsgCancelUp As Byte=4 Private Const MsgCancelDown As Byte=5 Private Const MsgCancelLeft As Byte=6 Private Const MsgCancelRight As Byte=7,第一章 DirectX简介,四、项目框架 2、Gra
22、phicsClassPublic Sub New()Me.Text=“游戏框架“Play=New PlayClass(Me)Input=New InputClass(Me,Play)DrawingFont=New GraphicsFont(Arial,)End Sub,第一章 DirectX简介,四、项目框架 2、GraphicsClassProtected Overrides Sub Render()Input.GetInputState()Device.Clear(ClearFlags.Target Or ClearFlags.ZBuffer,Color.Blue,1.0f,0)Devic
23、e.BeginScene()DrawingFont.DrawText(5,5,Color.White,X:&Destination.X&Y:&Destination.Y)Device.EndScene()End Sub,第一章 DirectX简介,四、项目框架 2、GraphicsClassProtected Overrides Sub InitializeDeviceObjects()DrawingFont.InitializeDeviceObjects(Device)End Sub,第一章 DirectX简介,四、项目框架 2、GraphicsClassProtected Override
24、s Overloads Sub Dispose(ByVal Disposing As Boolean)Play.Dispose()MyBase.Dispose(Disposing)End Sub,第一章 DirectX简介,四、项目框架 2、GraphicsClassPublic Sub PeerClose()Me.Dispose()End Sub,第一章 DirectX简介,四、项目框架 2、GraphicsClassPublic Sub MessageArrived(Message As Byte)Select Case(Message)Case MsgUp:Destination.X=1
25、 Case MsgCancelRight:Destination.Y=0 End Select End Sub,第一章 DirectX简介,四、项目框架 3、InputClass 控制器类Imports SystemImports System.DrawingImports Imports Microsoft.DirectXImports,第一章 DirectX简介,四、项目框架 3、InputClass 控制器类Public Class InputClass Private Const MsgUp As Byte=0 Private Const MsgDown As Byte=1 Priva
26、te Const MsgLeft As Byte=2 Private Const MsgRight As Byte=3 Private Const MsgCancelUp As Byte=4 Private Const MsgCancelDown As Byte=5 Private Const MsgCancelLeft As Byte=6 Private Const MsgCancelRight As Byte=7,第一章 DirectX简介,四、项目框架 3、InputClass 控制器类 Private PressedDown As Boolean=False Private Press
27、edLeft As Boolean=False Private PressedRight As Boolean=False Private Owner As Control=Nothing Private LocalDevice As Device=Nothing Private Play As PlayClass=Nothing,第一章 DirectX简介,四、项目框架 3、InputClass 控制器类 Public Sub New(Owner As Control,Play As PlayClass)Me.Owner=Owner Me.Play=Play LocalDevice=New
28、Device(SystemGuid.Keyboard)LocalDevice.SetDataFormat(DeviceDataFormat.Keyboard)LocalDevice.SetCooperativeLevel(Owner,CooperativeLevelFlags.Foreground Or CooperativeLevelFlags.NonExclusive)End Sub,第一章 DirectX简介,四、项目框架 3、InputClass 控制器类 Public Function GetInputState()As Point Dim State As KeyboardStat
29、e=Nothing Dim P As Point=New Point(0)Dim Continue As Boolean Try State=LocalDevice.GetCurrentKeyboardState(),第一章 DirectX简介,四、项目框架 3、InputClass 控制器类 Catch E As InputException Do Continue=False Application.DoEvents()Try LocalDevice.Acquire()Catch E2 As InputLostException Continue=True Catch E3 As Othe
30、rApplicationHasPriorityException Continue=True End Try,第一章 DirectX简介,四、项目框架 3、InputClass 控制器类 If Not Owner.Created Then Exit Do Loop While Continue End Try If(Nothing Is State)Then Return P End If,第一章 DirectX简介,四、项目框架 3、InputClass 控制器类 If(State.Item(Key.Down)Then PressedDown=True Play.WriteMessage(M
31、sgDown)Else If(PressedDown=True)Then PressedDown=False Play.WriteMessage(MsgCancelDown)End If,第一章 DirectX简介,四、项目框架 3、InputClass 控制器类 If(State(Key.Up)Then PressedUp=True Play.WriteMessage(MsgUp)Else If(PressedUp=True)Then PressedUp=False Play.WriteMessage(MsgCancelUp)End If,第一章 DirectX简介,四、项目框架 3、Inp
32、utClass 控制器类 If(State(Key.Left)Then PressedLeft=True Play.WriteMessage(MsgLeft)Else If(PressedLeft=True)PressedLeft=False Play.WriteMessage(MsgCancelLeft)End If,第一章 DirectX简介,四、项目框架 3、InputClass 控制器类 If(State(Key.Right)Then PressedRight=True Play.WriteMessage(MsgRight)Else If(PressedRight=True)Then
33、PressedRight=False Play.WriteMessage(MsgCancelRight)End If Return P End Function,第一章 DirectX简介,四、项目框架 4、PlayClass 玩家角色类 Imports SystemImports System.CollectionsImports Imports Microsoft.DirectXImports,第一章 DirectX简介,四、项目框架 4、PlayClass 玩家角色类Public Class PlayClass Implements IDisposable Private Message
34、 As MessageDelegate=Nothing Private Parent As GraphicsClass=Nothing Public PeerObject As Peer=Nothing Private Connect As ConnectWizard=Nothing Private PlayerList As ArrayList=New ArrayList()Private LocalPlayerID As Integer=0Public AppGuid As Guid=New Guid(876a3036-Ffd7-46bc-9209-B42f617b9bF1),第一章 Di
35、rectX简介,四、项目框架 4、PlayClass 玩家角色类 Public Structure Players Public DpnID As Integer Public Name As String Public Sub New(Id As Integer,N As String)DpnID=Id Name=N End Sub End Structure,第一章 DirectX简介,四、项目框架 4、PlayClass 玩家角色类 Public Overloads Sub Dispose()Implements IDisposable.Dispose PeerObject.Dispos
36、e()End Sub,第一章 DirectX简介,四、项目框架 4、PlayClass 玩家角色类 Public Sub New(Parent As GraphicsClass)Me.Parent=Parent Me.PeerObject=PeerObject Me.Message=New MessageDelegate(AddressOf Parent.MessageArrived)PeerObject=New Peer(),第一章 DirectX简介,四、项目框架 4、PlayClass 玩家角色类AddHandler PeerObject.PlayerCreated,AddressOf
37、Me.PlayerCreated AddHandler PeerObject.PlayerDestroyed,AddressOf Me.PlayerDestroyed AddHandler PeerObject.HostMigrated,AddressOf Me.HostMigrated AddHandler PeerObject.Receive,AddressOf Me.DataReceived AddHandler PeerObject.SessionTerminated,AddressOf Me.SessionTerminated,第一章 DirectX简介,四、项目框架 4、PlayC
38、lass 玩家角色类 Connect=New ConnectWizard(PeerObject,AppGuid,“游戏框架)If(Not Connect.StartWizard()Then()MessageBox.Show(DirectPlay Initialization Was Incomplete.Application Will Terminate.)Throw New DirectXException()End If End Sub,第一章 DirectX简介,四、项目框架 4、PlayClass 玩家角色类 Connect=New ConnectWizard(PeerObject,AppGuid,“游戏框架)If(Not Connect.StartWizard()Then()MessageBox.Show(DirectPlay Initialization Was Incomplete.Application Will Terminate.)Throw New DirectXException()End If End Sub,