D3D程序的建立过程

转载 2005年05月11日 20:59:00

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
 
}

DX学习笔记(初始化Direct 3D)

首先是头文件,在那里面定义了3个函数,分别是初始化函数InitD3D(),消息循环函数EnterMsgLoop ,窗口过程函数WndProc() 其余的Release() Delete()都是以模...
  • zero_witty
  • zero_witty
  • 2016年06月09日 16:15
  • 1346

d3d 程序简单demo 解析

简单的D3D程序绘制流程框架
  • himilong
  • himilong
  • 2015年08月17日 21:27
  • 1117

【D3D】一个D3D程序的基本结构

学习D3D必备的基础知识: 1. C/C++; 2. Win32 API基础; 3. COM( 组件对象模型)的使用; 4. 数学基础(矩阵、向量、四元数等); 5. 计算机图形学基础(三维...
  • woaini454186694
  • woaini454186694
  • 2014年03月30日 15:04
  • 1608

D3D Mesh 例子程序

D3D Mesh 练习 例子程序
  • shiyongfu19890308
  • shiyongfu19890308
  • 2014年08月14日 18:37
  • 1164

败者树建立过程图示

==================================================
  • friendbkf
  • friendbkf
  • 2015年10月09日 10:53
  • 1091

决策树的创建过程

创建过程是先横向寻找维度,再在该维度上按特征值切割。具体过程如下:     数据集的特征 dataset=[[1,1,yes],                 [1,1,yes],     ...
  • zcc_0015
  • zcc_0015
  • 2015年05月13日 07:13
  • 1199

TCP建立连接的过程

在可靠的TCP网络通信中,客户端和服务器端通信建立连接的过程可简单表述为三次握手(建立连接的阶段)和四次挥手(释放连接阶段),下图是这两个阶段的一个完整的表述: 其状态图可以表示为,    下面我...
  • caoyan_12727
  • caoyan_12727
  • 2016年08月18日 17:33
  • 7238

DirectX游戏编程(一):创建一个Direct3D程序

转自 http://blog.csdn.net/lfeng1420/article/details/20639665 一、环境 Visual Studio 2012,DirectX SDK ...
  • u012419410
  • u012419410
  • 2015年03月28日 21:56
  • 2026

BGP建立邻居过程

1、idle                      此状态不允许bgp连接,不分配网络资源 2、Connection       此时已完成3次握手 3、active             ...
  • AKAK2424
  • AKAK2424
  • 2016年04月14日 21:43
  • 369

投影矩阵推导过程

3d程序经常要用到矩阵算法, 比较常见的如旋转矩阵,平移矩阵,以及投影矩阵 opengl与d3d均有对应的api进行相应的操作。 本文主要介绍一下投影矩阵, (在阅读irricht与ogre代码时碰...
  • lsccsl
  • lsccsl
  • 2014年03月24日 08:48
  • 2904
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:D3D程序的建立过程
举报原因:
原因补充:

(最多只允许输入30个字)