1 / 35
文档名称:

directD学习笔记.docx

格式:docx   大小:364KB   页数:35页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

directD学习笔记.docx

上传人:1542605778 2020/2/27 文件大小:364 KB

下载得到文件列表

directD学习笔记.docx

文档介绍

文档介绍:DirectXSDK2006学****笔记1——框架2008-01-3113:20友情提醒:所谓的框架是指SDK目录下\Samples\C++\Common路径下的DXUT系列函数包装。学****框架的前提是必须有足够的WindowsAPI,GUI编程经验,必须熟悉Windows的消息机制,回调机制,最好有万行左右的C/C++编程经验。MFC在这里没有任何用处。另外我觉得最好在看程序之前对于D3D的所有概念有点了解,什么是vertex,texture,matrix,lighting,mesh等等,以及相关的数学概念。这些都可以在网上找到中文翻译,帮助你快速入门。 DXSDK2006和2003版的比起来更新了不少东西,比如DirectX10,还有ManagedDirectX等等。不过我关心的还是D3D9。除了个别接口的更改之外,DXSDK2006还提供了一套图形控件的类库,它的界面还是很漂亮的:)如图: 学****一个框架还是从它的入口学****比较方便,否则容易迷失在无穷无尽的API和层层包装之中。。首先是2003版的框架中提供了一个CD3DApplication类,这个类对于初始化,清除,以及游戏窗口的创建,游戏主循环进行了包装。这是一个不错的类,不知道为什么在2006版中去掉了。不过不要紧,2006版的框架中提供的一些C包装函数已经足够了。在看这些函数之前,我们还是先来看看SDK目录下\Samples\C++\Direct3D\Tutorials中有些什么吧。Tut01_CreateDevice是创建框架,这个程序不用框架,研究一下有助于了解D3D的大致工作流程。下面是winmain函数中的一部分。   //InitializeDirect3D   if(EEDED(InitD3D(hWnd)))   {       //Showthewindow       ShowWindow(hWnd,SW_SHOWDEFAULT);       UpdateWindow(hWnd);       //Enterthemessageloop       MSGmsg;       while(GetMessage(&msg,NULL,0,0))       {           TranslateMessage(&msg);           DispatchMessage(&msg);       }   } 在消息循环之前有个初始化设备的函数InitD3D(hWnd),其代码如下:HRESULTInitD3D(HWNDhWnd){   if(NULL==(g_pD3D=Direct3DCreate9(D3D_SDK_VERSION)))       returnE_FAIL;   D3DPRESENT_PARAMETERSd3dpp;   ZeroMemory(&d3dpp,sizeof(d3dpp));   =TRUE;   =D3DSWAPEFFECT_DISCARD;   =D3DFMT_UNKNOWN;if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp,&g_pd3dDevice)))   {       returnE_FAIL;   }   returnS_OK;}主要是调用Direct3DCreate9和g_pD3D->CreateDevice这两个函数。查看DXSDK文档中关于D3DPRESENT_PARAMETERS的定义,大致了解一下。接下来要关心的就是消息循环了,在回调函数MsgProc中处理了两个消息,一个是WM_DESTROY,里面调用了Cleanup函数,另一个是WM_PAINT函数,里面调用了Render函数。Cleanup函数很简单,就是调用D3D对象及其设备对象的Release函数释放资源,而Render函数就是D3D中最重要的函数了。VOIDRender(){   if(NULL==g_pd3dDevice)       return;   //Clearthebackbuffertoabluecolor   g_pd3dDevice->Clear(0,NULL,D3DCLEAR_TARGET,D3DCOLOR_XRGB(0,0,255),,0);      //Beginthescene   if(EEDED(g_pd3dDevice->BeginScene()))