D3D程序的建立过程

1. 首先是建立一个程序框架,用单文档界面就可以了。
2. 以CWnd为基类,派生一个窗口类CD3DWnd。
3. 在主窗口增加一个CD3DWnd数据类型成员,也既是产生一个
CD3DWnd对象。
方法:CD3DWnd m_pWndD3D; //标准的命名方法
2.利用类向导添加两个消息处理函数

//用于创建并显示一个CD3DWnd窗口
void CMainFrame::OnD3dBegin()
{
 m_wndD3D.CreateEx(
  0,AfxRegisterWndClass(0,NULL,NULL,NULL),
  "Direct3D窗口",WS_POPUP|WS_CAPTION|WS_VISIBLE,
  CRect(100,100,500,500),this,0);
  //: Add your command handler code here
 
}

//销毁窗口
void CMainFrame::OnD3dEnd()
{
 // TODO: Add your command handler code here
 m_wndD3D.DestroyWindow();
}

小结:通过上面的部分就能为建立D3D搭一个桥了,只是现在建立的窗口只是一个MFC窗口。下面的部分为它添加DIRECT3D的功能。

4. 初始化Direct3D
A. 创建Direct3D对象
   LPDIRECT3D9 m_pD3D;
   LPDIRECT3DDEVICE9 m_pDevice;
   void InitD3D();

void InitD3D()的代码
void CD3DWnd::InitD3D()
{
 m_pD3D=::Direct3DCreate9(D3D_SDK_VERSION);
 D3DPRESENT_PARAMETERS d3dpp;
 ::ZeroMemory(&d3dpp,sizeof(d3dpp));
 d3dpp.Windowed=TRUE;
    d3dpp.SwapEffect=D3DSWAPEFFECT_DISCARD;
 d3dpp.BackBufferFormat=D3DFMT_UNKNOWN;

 m_pD3D->CreateDevice(
  D3DADAPTER_DEFAULT,
  D3DDEVTYPE_HAL,
  m_hWnd,
  D3DCREATE_SOFTWARE_VERTEXPROCESSING,
  &d3dpp,&m_pDevice);
}
这个初始化函数建立好之后还要在CWndD3D中创建创建函数,以便调用InitD3D
int CD3DWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
 if (CWnd::OnCreate(lpCreateStruct) == -1)
  return -1;
 
 // TODO: Add your specialized creation code here
 InitD3D();
 return 0;
}

B. 为创建好的Direct3D对象创建设备对象
渲染部分
还是必须先创建这个函数
void CD3DWnd::Render()
{
 m_pDevice->Clear(
  0,NULL,D3DCLEAR_TARGET,
  D3DCOLOR_XRGB(0,255,255),
  1.0f,0);
 m_pDevice->BeginScene();
 m_pDevice->EndScene();
 m_pDevice->Present(NULL,NULL,NULL,NULL);
}
然后再调用
void CD3DWnd::OnPaint()
{
 CPaintDC dc(this); // device context for painting
 Render();
 // TODO: Add your message handler code here
 
 // Do not call CWnd::OnPaint() for painting messages
}
5. 释放接口
分两部分
第一部分是把设备对象和D3D对象按照次序释放。
void CD3DWnd::Cleanup()
{
 m_pDevice->Release();
 m_pD3D->Release();

}
第二部分是把CD3DWnd类在内存中师范出来。
void CD3DWnd::OnDestroy()
{
 CWnd::OnDestroy();
 Cleanup();
 // TODO: Add your message handler code here
 
}

你可能感兴趣的:(command,null,文档,mfc,Parameters,Direct3D)