您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > directx8中文教程_第一章准备就绪
DirectXTutorials第一章:准备就绪Whatyouwillneed(你需要什么)DirectX8.0SDK(可以从下载)VC6(SP5)/VC.NETWindows程序设计经验通晓C++和OOPIntroduction(序)(原著的话)欢迎阅读本DX教程。本教程至少能帮你入门、使你了解怎样用DX8来开发Windows游戏。我写这个教程的原由有二:首先,当出现DX时,我还是一个初学者。所以,我想边学习边写一个教程来锻炼自己。其次,对初学者来说,DXSDK并不是很有帮助。而且,网上也没有什么像样的Dx8教程。另外,就像上面我提到的,我也是个初学者,所以,如果你发现教程中有什么地方不对,请给我写信:webmaster@andypike.com。译者言我也是一名初学者,所以,有言在先:如果你读英文能如履平地,建议你还是去读原著。此教程很适合入门,等你入门以后,你会发现,其实一切并没有想象的那样复杂。这是个不错的Dx8教程,我会尽最大努力把它翻译好。注:我并没有完全按照原著来译,不适之处,请多包涵。嗯,你应该弄到教程附带的源代码,没有那个可不行!可以到去下载。欢迎指出我的错误,或与我联系,我的Email:Chaoyu_JIANG@hotmail.comorAman_JIANG@163.com,QQ:15852673。COMWhatisCOM?COM是什么呢?COM就是ComponentObjectModel,组件对象模型。COM接口和C++的抽象类相似(但不一样),就像抽象类没有与之相关的实际代码一样,COM描述了一套符号和语法而非实现过程。你也可以把COM对象就想象成一套为某个主题而设计的一整套库函数。DX就提供了一套完整的设计3D游戏的库。最棒的就是,使用DX时,你不必去直接接触硬件,而由DX帮你代理了。这使得一些事情变得简单了。使用COM时应该注意,必须在程序结束前释放所有的COM对象(或接口)。而且,释放它们的顺序应该和创建它们的顺序相反。就像这样:1.CreateinterfaceA.2.CreateinterfaceB.3.ReleaseinterfaceB.4.ReleaseinterfaceA.调用它们的Release模块来释放它们。PageFlipping(页翻动)页翻动又是什么呢?嗯,你知道电影的原理吗?电影通过以每秒钟24幅的速度连续的闪动图像,每幅图像之间的差别又很小,由于人眼的滞留作用,我们看到的画面就是连续的了。这不难理解。其实,DirectX也是这样工作的。我们把要显示的物体通通绘制到一个不可见的页上,我们称这个页为“后缓冲区”。绘制完后,快速的把它翻动到可见的“前缓冲区”上,并重复这个过程。当用户正在观看新绘制的可见页(前缓冲区)时,程序要降下一幅要显示的东西绘制到“后缓冲区”上。快速而连续的重复次过程,用户就会看到像电影一样连续的图像了。不过一般情况下,我们每秒钟能绘制的页数要比电影多很多。DirectXTutorials如果我们不是用页翻动技术,那用户看到的屏幕中的物体,将会一个个的被绘制出来,虽然速度可能很快,但效果会很差,那并不是我们想要的。所以,我们的游戏需要一个循环,称之为“GameLoop”。每次循环,我们都要清除“后缓冲区”,把该绘制的物体按照一定的逻辑都绘制到那上面,然后把它翻动到“前缓冲区”上,然后进入下一次循环。这个循环得直到游戏退出了才能结束。有时我们可能需要好几个这样的“后缓冲区”(多缓冲)来组成一个“交换链”(SwapChain),以求更好的效果。Devices(设备)Whatisadevice?设备是什么?简单的说,就是你的3D卡。你得创建一个接口来代表设备,然后使用那个接口来绘制东西。GameLoop(游戏循环)什么是游戏循环呢?游戏循环是一段代码,在游戏退出之前循环执行的代码。这段代码在每次循环中都要:在屏幕上绘制物体(或场景人物随便什么)、处理游戏的逻辑过程(如:物体的移动、人工智能等等)、处理Windows的消息等等。基本上就是这样了。CreatingYourFirstProject(创建你的第一个项目)译者:嗯,这部分我就不用译了吧,这可是基础的东西。不过还是说说初学者容易忽略的一点:一定要把你的DXSDK的Include目录和Lib目录的路径添加到VC的目录设置列表中去,而且不要把Include和Lib的地方放错了,而且还要放在第一位。还要把d3d8.lib添加到项目设置的Lib列表中,否则编译不了。Okay,that’senoughtheoryletsgetstarted.Followthestep-by-stepguidebelowtocreateyourfirstDirectXGraphicsproject.1.InVisualC++createanewWin32Application.a.FileNewb.FromtheProjectstabselectWin32Applicationc.Enteranameforyourprojectsuchas“DXProject1”d.Selectafolderforthelocationofyoursourcecodefilese.ClickNextf.Selecttheemptyprojectoption.g.ClickFinish2.Makesurethatyourprojectsettingsarecorrect.a.ProjectSettings...b.OntheLinktab,makesurethatd3d8.libisinthelistofObject/LibraryModules.Ifitisn’tsimplytypeitin.3.Makesurethatyoursearchpathsarecorrect.a.ToolsOptionsDirectoriesTabb.IntheShowdirectoriesfordrop-down,selectincludefiles.c.Ifitdoesnotexistalready,addthefollowingpath:SDKINSTALLPATH\include.d.Makesurethatthispathisatthetopofthelistbyclickingontheuparrowbutton(ifneeded).e.IntheShowdirectoriesfordrop-down,selectlibraryfiles.f.Ifitdoesnotexistalready,addthefollowingpath:SDKINSTALLPATH\lib.g.Makesurethatthispathisatthetopofthelistbyclickingontheuparrowbutton(ifneeded).4.Addthesourcecode.a.FileNewb.FromtheFilestab,selectC++SourceFilec.Enterafilenamesuchas“Main.cpp”d.Copythecodesegmentbelow,andthenpasteitintoyournewfile.5.BuildandRuntheprogram.a.PressF7tobuildyourprojectb.PressF5torunDirectXTutorials下面就是本章的例子了,好好研究吧,不难。#included3d8.hLPDIRECT3D8g_pD3D=NULL;LPDIRECT3DDEVICE8g_pD3DDevice=NULL;HRESULTInitialiseD3D(HWNDhWnd){//Firstofall,createthemainD3Dobject.Ifitiscreatedsuccessfullywe//shouldgetapointertoanIDirect3D8interface.g_pD3D=Direct3DCreate8(D3D_SDK_VERSION);if(g_pD3D==NULL){returnE_FAIL;}//GetthecurrentdisplaymodeD3DDISPLAYMODEd3ddm;if(FAILED(g_pD3D-GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3ddm))){returnE_FAIL;}//CreateastructuretoholdthesettingsforourdeviceD3DPRESENT_PARAMETERSd3dpp;ZeroMemory(&d3dpp,sizeof(d3dpp));//Fillthestructure.//Wewantourprogramtobewindowed,andsetthebackbuffertoaformat//thatmatchesourcurrentdisplaymoded3dpp.Windowed=TRUE;d3dpp.SwapEffect=D3DSWAPEFFECT_COPY_VSYNC;d3dpp.BackBufferFormat=d3ddm.Format;//CreateaDirect3Ddevice.if(FAILED(g_pD3D-CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp,&g_pD3DDevice))){returnE_FAIL;}returnS_OK;}voidRender(){if(g_pD3DDevice==NULL){return;}//Clearthebackbuffertoagreencolourg_pD3DDevice-Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,255,0),1.0f,0);//Beginthesceneg_pD3DDevice-BeginScene();//Renderingofourgameobjectswillgohere//Endthesceneg_pD3DDevice-EndScene();DirectXTutorials(frontbuffer).g_pD3DDevice-Present(NULL,NULL,NULL,NULL);}voidCleanUp(){if(g_pD3DDevice!=NULL){g_pD3DDevice-Release();g_pD3DDevice=NULL;}if(g_pD3D!=NULL){g_pD3D-Release();g_pD3D=NULL;}}voidGameLoop(){//EnterthegameloopMSGmsg;BOOLfMessage;PeekMessage(&msg,NULL,0U,0U,PM_NOREMOVE);while(msg.message!=WM_QUIT){fMessage=PeekMessage(&msg,NULL,0U,0U,PM_REMOVE);if(fMessage){//Processmessa
本文标题:directx8中文教程_第一章准备就绪
链接地址:https://www.777doc.com/doc-2870431 .html