资源描述:
《游戏软件开发PPT课件》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
游戏软件开发1.
1第一章DirectX简介一、什么是DirectXDirectX,(DirecteXtension,简称DX)是由微软公司创建的多媒体编程接口。由C++编程语言实现,遵循COM。被广泛使用于MicrosoftWindows、MicrosoftXbox和MicrosoftXbox360电子游戏开发,并且只能支持这些平台。最新版本为DirectX11.1,创建在最新的Windows8上。2.
2第一章DirectX简介二、功能DirectX加强3D图形和声音效果,并提供设计人员一个共同的硬件驱动标准,让游戏开发者不必为每一品牌的硬件来写不同的驱动程序,也降低了用户安装及设置硬件的复杂度。从字面意义上说,Direct就是直接的意思,而后边的X则代表了很多的意思,从这一点上可以看出DirectX的出现就是为了为众多软件提供直接服务的。3.
3第一章DirectX简介三、组成DirectX是由很多API组成的,按照性质分类,可以分为四大部分,显示部分、声音部分、输入部分和网络部分。4.
4第一章DirectX简介三、组成1、显示部分显示部分担任图形处理的关键,分为DirectDraw(DDraw)和Direct3D(D3D),前者主要负责2D图像加速。它包括很多方面:我们播放mpg、DVD电影、看图、玩小游戏等等都是用的DDraw,你可以把它理解成所有划线的部分都是用的DDraw。后者则主要负责3D效果的显示,比如CS中的场景和人物、FIFA中的人物等等,都是使用了DirectX的Direct3D5.
5第一章DirectX简介三、组成1、显示部分6.
6第一章DirectX简介三、组成2、声音部分声音部分中最主要的API是DirectSound,除了播放声音和处理混音之外,还加强了3d音效,并提供了录音功能。7.
7第一章DirectX简介三、组成3、输入部分输入部分DirectInput可以支持很多的游戏输入设备,它能够让这些设备充分发挥最佳状态和全部功能。除了键盘和鼠标之外还可以连接手柄、摇杆、模拟器等。8.
8第一章DirectX简介三、组成4、网络部分网络部分DirectPlay主要就是为了具有网络功能游戏而开发的,提供了多种连接方式,TCP/IP,IPX,Modem,串口等等,让玩家可以用各种连网方式来进行对战,此外也提供网络对话功能及保密措施。9.
9第一章DirectX简介三、历史1、DirectX1.0第一代的DirectX很不成功,推出时众多的硬件均不支持,当时基本都采用专业图形API-OpenGL,缺乏硬件的支持成了其流行的最大障碍。2、DirectX2.0DirectX2.0在二维图形方面做了些改进,增加了一些动态效果,采用了Direct3D的技术。这样DirectX2.0与DirectX1.0有了相当大的不同。在DirectX2.0中,采用了“平滑模拟和RGB模拟”两种模拟方式对三维(3D)图像进行加速计算的。DirectX2.0同时也采用了更加友好的用户设置程序并更正了应用程序接口的许多问题。从DirectX2.0开始,整个DirectX的设计架构雏形就已基本完成。10.
10第一章DirectX简介三、历史DirectX3.0的推出是在1997年最后一个版本的Windows95发布后不久,此时3D游戏开始深入人心,DirectX也逐渐得到软硬件厂商的认可。97年时应用程序接口标准共有三个,分别是专业的OpenGL接口,微软的DirectXD接口和3DFX公司的Glide接口。而那时的3DFX公司是最为强大的显卡制造商,它的Glide接口自然也受到最广泛的应用,但随着3DFX公司的没落,Voodoo显卡的衰败,Glide接口才逐渐消失了。DirectX3.0是DirectX2.0的简单升级版,它对DirectX2.0的改动并不多。包括对DirectSound(针对3D声音功能)和DirectPlay(针对游戏/网络)的一些修改和升级。DirectX3.0集成了较简单的3D效果,还不是很成熟。11.
11第一章DirectX简介三、历史DirectX5.0微软公司并没有推出DirectX4.0,而是直接推出了DirectX5.0。此版本对Direct3D做出了很大的改动,加入了雾化效果、Alpha混合等3D特效,使3D游戏中的空间感和真实感得以增强,还加入了S3的纹理压缩技术。同时,DirectX5.0在其它各组件方面也有加强,在声卡、游戏控制器方面均做了改进,支持了更多的设备。因此,DirectX发展到DirectX5.0才真正走向了成熟。此时的DirectX性能完全不逊色于其它3DAPI,而且大有后来居上之势。12.
12第一章DirectX简介三、历史DirectX6.0推出时,其最大的竞争对手之一Glide,已逐步走向了没落,而DirectX则得到了大多数厂商的认可。DirectX6.0中加入了双线性过滤、三线性过滤等优化3D图像质量的技术,游戏中的3D技术逐渐走入成熟阶段。13.
13第一章DirectX简介三、历史DirectX7.0最大的特色就是支持T&L,中文名称是“坐标转换和光源”。3D游戏中的任何一个物体都有一个坐标,当此物体运动时,它的坐标发生变化,这指的就是坐标转换;3D游戏中除了场景+物体还需要灯光,没有灯光就没有3D物体的表现,无论是实时3D游戏还是3D影像渲染,加上灯光的3D渲染是最消耗资源的。虽然OpenGL中已有相关技术,但此前从未在民用级硬件中出现。在T&L问世之前,位置转换和灯光都需要CPU来计算,CPU速度越快,游戏表现越流畅。使用了T&L功能后,这两种效果的计算用显示卡的GPU来计算,这样就可以把CPU从繁忙的劳动中解脱出来。换句话说,拥有T&L显示卡,使用DirectX7.0,即使没有高速的CPU,同样能流畅的跑3D游戏。14.
14第一章DirectX简介三、历史DirectX8.0的推出引发了一场显卡革命,它首次引入了“像素渲染”概念,同时具备像素渲染引擎(PixelShader)与顶点渲染引擎(VertexShader),反映在特效上就是动态光影效果。同硬件T&L仅仅实现的固定光影转换相比,VS和PS单元的灵活性更大,它使GPU真正成为了可编程的处理器。这意味着程序员可通过它们实现3D场景构建的难度大大降低。通过VS和PS的渲染,可以很容易的营造出真实的水面动态波纹光影效果。此时DirectX的权威地位终于建成。15.
15第一章DirectX简介三、历史DirectX9.02002年底,微软发布DirectX9.0。DirectX9中PS单元的渲染精度已达到浮点精度,传统的硬件T&L单元也被取消。全新的VertexShader(顶点着色引擎)编程将比以前复杂得多,新的VertexShader标准增加了流程控制,更多的常量,每个程序的着色指令增加到了1024条。PS2.0具备完全可编程的架构,能对纹理效果即时演算、动态纹理贴图,还不占用显存,理论上对材质贴图的分辨率的精度提高无限多;另外PS1.4只能支持28个硬件指令,同时操作6个材质,而PS2.0却可以支持160个硬件指令,同时操作16个材质数量,新的高精度浮点数据规格可以使用多重纹理贴图,可操作的指令数可以任意长,电影级别的显示效果轻而易举的实现。16.
16第一章DirectX简介三、历史DirectX9.0C与过去的DirectX9.0b和ShaderModel2.0相比较,DirectX9.0c最大的改进,便是引入了对ShaderModel3.0(包括PixelShader3.0和VertexShader3.0两个着色语言规范)的全面支持。举例来说,DirectX9.0b的ShaderModel2.0所支持的VertexShader最大指令数仅为256个,PixelShader最大指令数更是只有96个。而在最新的ShaderModel3.0中,VertexShader和PixelShader的最大指令数都大幅上升至65535个,全新的动态程序流控制、位移贴图、多渲染目标(MRT)、次表面散射Subsurfacescattering、柔和阴影Softshadows、环境和地面阴影Environmentalandgroundshadows、全局照明(Globalillumination)等新技术特性,使得GeForce6、GeForce7系列以及RadeonX1000系列立刻为新一代游戏以及具备无比真实感、幻想般的复杂的数字世界和逼真的角色在影视品质的环境中活动提供强大动力。17.
17第一章DirectX简介三、历史Directx10.0已经包含在WindowsVista操作系统中,目前无法单独下载使用新的DirectX使你获得更好的图像显示质量,使多人游戏具可伸缩性,以及包括更棒的音频效果。它强化了针对DirectDraw和Direct3D的接口,简化了应用扩展,提升性能;改善了图形创作工具,更易于做出最佳的3-D角色和环境;点光源式光影和像素式光影使图象更逼真;强化了DirectSound和DirectMusic,简化了其应用扩展;DLS2音频合成功能提高了乐器音频的真实感;DirectInput的设备影射功能令对设备的支持更简单;DirectPlay使多人游戏的性能和可扩展性得到了提高;DirectPlay提供了IP声音通讯;DirectShow的应用编程接口提供了音频/视频的实时合成和即时编辑;DirectShow支持Windows媒体音频和视频(WMA和WMV)的读写;MicrosoftTV技术可以支持数字电视节目。18.
18第一章DirectX简介三、历史Directx112009年1月9日星期五,微软将面向公众发布Windows7客户端Beta1测试版。而此前一天,即1月8日,微软将率先发布Windows7服务器版本的Beta1测试版。Windows7是微软的下一代操作系统,当前业内普遍认为,微软将在2009年圣诞购物旺季前发布Windows7正式版。在微软刚刚发布的Windows7Beta版本中,一些已经安装使用的用户的发现了DirectX11已经包含其中了。DirectX11作为3D图形接口,不仅支持未来的DX11硬件,还向下兼容当前的DirectX10和10.1硬件。DirectX11增加了新的计算shader技术,可以允许GPU从事更多的通用计算工作,而不仅仅是3D运算,这可以鼓励开发人员更好地将GPU作为并行处理器使用。19.
19第一章DirectX简介三、历史Directx11.22013年6月28日,微软发布Directx11.2(Alpha版),其中一个重要特性是允许游戏使用系统内存和显存储存纹理数据,微软的AntoineLeblond在BUILD大会上演示了主要利用内存而不是显存去储存9GB纹理数据。这项特性对于未来的高清游戏具有重要意义。然而一个问题是,DirectX11.2不支持Windows8及之前操作系统,只支持Windows8.1和下一代主机XboxOne及PlayStation4。20.
20第一章DirectX简介三、历史XNA美国微软于8月13日发表针对业余创作者所设计的游戏开发套件「XNAGameStudioExpress」,提供没有专门开发器材的一般PCWindowsXP使用者开发跨Xbox360与PC平台游戏的管道.XNA是Microsoft的下一代软件开发平台,致力于帮助开发者更快地开发更好的游戏。XNA被微软公司开发,并且开始于多年前,但是保持地非常秘密。在2004年GDC(年度最大的游戏开发讨论会)上微软第一次宣布XNA。XNA不仅仅像DirectX一样是个框架;它还包含很多工具,甚至是一个自定义的IDE。因为直到2006年,还没有一点工具被发布,DirectX的开发者们仅仅在2004到2006年的DirectXSDK文档的右上角标示了“XNA”的图标。21.
21第一章DirectX简介四、项目框架渲染器状态控制器仿真器22.
22第一章DirectX简介四、项目框架1、程序入口MainImportsSystemImportsSystem.DrawingImportsContainer=System.ComponentModel.ContainerImportsMicrosoft.DirectX23.
23第一章DirectX简介四、项目框架1、程序入口MainPublicClassMainClassPrivateGraphicsAsGraphicsClass=NothingPublicSharedSubMain()DimMAsNewMainClass()EndSub24.
24第一章DirectX简介四、项目框架1、程序入口MainPublicSubNew()TryGraphics=NewGraphicsClass()CatchEAsDirectXExceptionReturnEndTryIfGraphics.CreateGraphicsSample()ThenGraphics.Run()EndIfEndSubEndClass25.
25第一章DirectX简介四、项目框架2、GraphicsClassImportsSystemImportsSystem.DrawingImportsSystem.Windows.FormsImportsMicrosoft.DirectXImportsMicrosoft.DirectX.Direct3DImportsDirect3D=Microsoft.DirectX.Direct3DPublicDelegateSubPeerCloseCallback()PublicDelegateSubMessageDelegate(MessageAsByte)26.
26第一章DirectX简介四、项目框架2、GraphicsClassPublicClassGraphicsClassInheritsGraphicsSamplePrivateDrawingFontAsGraphicsFont=NothingPrivateDestinationAsPoint=NewPoint(0,0)PrivateInputAsInputClass=NothingPrivatePlayAsPlayClass=NothingPrivateConstMsgUpAsByte=0PrivateConstMsgDownAsByte=1PrivateConstMsgLeftAsByte=2PrivateConstMsgRightAsByte=3PrivateConstMsgCancelUpAsByte=4PrivateConstMsgCancelDownAsByte=5PrivateConstMsgCancelLeftAsByte=6PrivateConstMsgCancelRightAsByte=727.
27第一章DirectX简介四、项目框架2、GraphicsClassPublicSubNew()Me.Text=“游戏框架“Play=NewPlayClass(Me)Input=NewInputClass(Me,Play)DrawingFont=NewGraphicsFont("Arial",System.Drawing.FontStyle.Bold)EndSub28.
28第一章DirectX简介四、项目框架2、GraphicsClassProtectedOverridesSubRender()Input.GetInputState()Device.Clear(ClearFlags.TargetOrClearFlags.ZBuffer,Color.Blue,1.0f,0)Device.BeginScene()DrawingFont.DrawText(5,5,Color.White,"X:"&Destination.X&"Y:"&Destination.Y)Device.EndScene()EndSub29.
29第一章DirectX简介四、项目框架2、GraphicsClassProtectedOverridesSubInitializeDeviceObjects()DrawingFont.InitializeDeviceObjects(Device)EndSub30.
30第一章DirectX简介四、项目框架2、GraphicsClassProtectedOverridesOverloadsSubDispose(ByValDisposingAsBoolean)Play.Dispose()MyBase.Dispose(Disposing)EndSub31.
31第一章DirectX简介四、项目框架2、GraphicsClassPublicSubPeerClose()Me.Dispose()EndSub32.
32第一章DirectX简介四、项目框架2、GraphicsClassPublicSubMessageArrived(MessageAsByte)SelectCase(Message)CaseMsgUp:Destination.X=1…CaseMsgCancelRight:Destination.Y=0EndSelectEndSub33.
33第一章DirectX简介四、项目框架3、InputClass控制器类ImportsSystemImportsSystem.DrawingImportsSystem.Windows.FormsImportsMicrosoft.DirectXImportsMicrosoft.DirectX.DirectInput34.
34第一章DirectX简介四、项目框架3、InputClass控制器类PublicClassInputClassPrivateConstMsgUpAsByte=0PrivateConstMsgDownAsByte=1PrivateConstMsgLeftAsByte=2PrivateConstMsgRightAsByte=3PrivateConstMsgCancelUpAsByte=4PrivateConstMsgCancelDownAsByte=5PrivateConstMsgCancelLeftAsByte=6PrivateConstMsgCancelRightAsByte=735.
35第一章DirectX简介四、项目框架3、InputClass控制器类PrivatePressedDownAsBoolean=FalsePrivatePressedLeftAsBoolean=FalsePrivatePressedRightAsBoolean=FalsePrivateOwnerAsControl=NothingPrivateLocalDeviceAsDevice=NothingPrivatePlayAsPlayClass=Nothing36.
36第一章DirectX简介四、项目框架3、InputClass控制器类PublicSubNew(OwnerAsControl,PlayAsPlayClass)Me.Owner=OwnerMe.Play=PlayLocalDevice=NewDevice(SystemGuid.Keyboard)LocalDevice.SetDataFormat(DeviceDataFormat.Keyboard)LocalDevice.SetCooperativeLevel(Owner,CooperativeLevelFlags.ForegroundOrCooperativeLevelFlags.NonExclusive)EndSub37.
37第一章DirectX简介四、项目框架3、InputClass控制器类PublicFunctionGetInputState()AsPointDimStateAsKeyboardState=NothingDimPAsPoint=NewPoint(0)DimContinueAsBooleanTryState=LocalDevice.GetCurrentKeyboardState()38.
38第一章DirectX简介四、项目框架3、InputClass控制器类CatchEAsInputExceptionDoContinue=FalseApplication.DoEvents()TryLocalDevice.Acquire()CatchE2AsInputLostExceptionContinue=TrueCatchE3AsOtherApplicationHasPriorityExceptionContinue=TrueEndTry39.
39第一章DirectX简介四、项目框架3、InputClass控制器类IfNotOwner.CreatedThenExitDoLoopWhileContinueEndTryIf(NothingIsState)ThenReturnPEndIf40.
40第一章DirectX简介四、项目框架3、InputClass控制器类If(State.Item(Key.Down))ThenPressedDown=TruePlay.WriteMessage(MsgDown)ElseIf(PressedDown=True)ThenPressedDown=FalsePlay.WriteMessage(MsgCancelDown)EndIf41.
41第一章DirectX简介四、项目框架3、InputClass控制器类If(State(Key.Up))ThenPressedUp=TruePlay.WriteMessage(MsgUp)ElseIf(PressedUp=True)ThenPressedUp=FalsePlay.WriteMessage(MsgCancelUp)EndIf42.
42第一章DirectX简介四、项目框架3、InputClass控制器类If(State(Key.Left))ThenPressedLeft=TruePlay.WriteMessage(MsgLeft)ElseIf(PressedLeft=True)PressedLeft=FalsePlay.WriteMessage(MsgCancelLeft)EndIf43.
43第一章DirectX简介四、项目框架3、InputClass控制器类If(State(Key.Right))ThenPressedRight=TruePlay.WriteMessage(MsgRight)ElseIf(PressedRight=True)ThenPressedRight=FalsePlay.WriteMessage(MsgCancelRight)EndIfReturnPEndFunction44.
44第一章DirectX简介四、项目框架4、PlayClass玩家角色类ImportsSystemImportsSystem.CollectionsImportsSystem.Windows.FormsImportsMicrosoft.DirectXImportsMicrosoft.DirectX.DirectPlay45.
45第一章DirectX简介四、项目框架4、PlayClass玩家角色类PublicClassPlayClassImplementsIDisposablePrivateMessageAsMessageDelegate=NothingPrivateParentAsGraphicsClass=NothingPublicPeerObjectAsPeer=NothingPrivateConnectAsConnectWizard=NothingPrivatePlayerListAsArrayList=NewArrayList()PrivateLocalPlayerIDAsInteger=0PublicAppGuidAsGuid=NewGuid("{876a3036-Ffd7-46bc-9209-B42f617b9bF1}")46.
46第一章DirectX简介四、项目框架4、PlayClass玩家角色类PublicStructurePlayersPublicDpnIDAsIntegerPublicNameAsStringPublicSubNew(IdAsInteger,NAsString)DpnID=IdName=NEndSubEndStructure47.
47第一章DirectX简介四、项目框架4、PlayClass玩家角色类PublicOverloadsSubDispose()ImplementsIDisposable.DisposePeerObject.Dispose()EndSub48.
48第一章DirectX简介四、项目框架4、PlayClass玩家角色类PublicSubNew(ParentAsGraphicsClass)Me.Parent=ParentMe.PeerObject=PeerObjectMe.Message=NewMessageDelegate(AddressOfParent.MessageArrived)PeerObject=NewPeer()49.
49第一章DirectX简介四、项目框架4、PlayClass玩家角色类AddHandlerPeerObject.PlayerCreated,AddressOfMe.PlayerCreatedAddHandlerPeerObject.PlayerDestroyed,AddressOfMe.PlayerDestroyedAddHandlerPeerObject.HostMigrated,AddressOfMe.HostMigratedAddHandlerPeerObject.Receive,AddressOfMe.DataReceivedAddHandlerPeerObject.SessionTerminated,AddressOfMe.SessionTerminated50.
50第一章DirectX简介四、项目框架4、PlayClass玩家角色类Connect=NewConnectWizard(PeerObject,AppGuid,“游戏框架")If(NotConnect.StartWizard())ThenMe.Parent.Show()MessageBox.Show("DirectPlayInitializationWasIncomplete.ApplicationWillTerminate.")ThrowNewDirectXException()EndIfEndSub51.
51第一章DirectX简介四、项目框架4、PlayClass玩家角色类Connect=NewConnectWizard(PeerObject,AppGuid,“游戏框架")If(NotConnect.StartWizard())ThenMe.Parent.Show()MessageBox.Show("DirectPlayInitializationWasIncomplete.ApplicationWillTerminate.")ThrowNewDirectXException()EndIfEndSub52.