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()))
directD学习笔记 来自淘豆网www.taodocs.com转载请标明出处.