dx9学习1

简介:
#include <d3d9.h>
InBlock.gif
LPDIRECT3D9                         g_pD3D      = NULL;
InBlock.gif LPDIRECT3DDEVICE9             g_pD3DDevice  = NULL;
InBlock.gif
HRESULT InitialiseD3D(HWND hWnd)
InBlock.gif {
InBlock.gif    //首先创建主要的D3D对象.如果创建成功我们将会得到一个指向IDirect3D8接口的指针
InBlock.gif   g_pD3D = Direct3DCreate9(D3D_SDK_VERSION);
InBlock.gif    if (g_pD3D == NULL)
InBlock.gif   {
InBlock.gif      return  E_FAIL;
InBlock.gif   }
InBlock.gif
   //获取当前的显示模式
InBlock.gif   D3DDISPLAYMODE d3ddm;
InBlock.gif    if (FAILED(g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm)))
InBlock.gif   {
InBlock.gif      return  E_FAIL;
InBlock.gif   }
InBlock.gif
   //创建一个结构来放置我们设备的设置信息
InBlock.gif   D3DPRESENT_PARAMETERS d3dpp; 
InBlock.gif   ZeroMemory(&d3dpp,  sizeof (d3dpp));
InBlock.gif
   //设置该结构体属性值
InBlock.gif    //我们想让我们的程序窗口化,并且设置了后缓冲的格式以匹配我们当前的显示模式
InBlock.gif   d3dpp.Windowed      = TRUE;
InBlock.gif   d3dpp.SwapEffect    = D3DSWAPEFFECT_COPY;
InBlock.gif   d3dpp.PresentationInterval=D3DPRESENT_INTERVAL_DEFAULT;
InBlock.gif   d3dpp.BackBufferFormat  = d3ddm.Format;
InBlock.gif
   //创建一个Direct3D设备
InBlock.gif    if (FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, 
InBlock.gif     D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pD3DDevice)))
InBlock.gif   {
InBlock.gif      return  E_FAIL;
InBlock.gif   }
InBlock.gif
   return  S_OK;
InBlock.gif }
InBlock.gif
void  Render()
InBlock.gif {
InBlock.gif    if (g_pD3DDevice == NULL)
InBlock.gif   {
InBlock.gif      return ;
InBlock.gif   }
InBlock.gif
   //清除后缓冲为绿色
InBlock.gif   g_pD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 255, 0), 1.0f, 0);
InBlock.gif
   //开始场景
InBlock.gif   g_pD3DDevice->BeginScene();
InBlock.gif
   //我们的游戏对象的渲染放到这里
InBlock.gif
   //结束场景
InBlock.gif   g_pD3DDevice->EndScene();
InBlock.gif
   //翻动前后缓冲以便后缓冲中渲染的一切能够显示在屏幕(前缓冲)上。
InBlock.gif   g_pD3DDevice->Present(NULL, NULL, NULL, NULL);
InBlock.gif }
InBlock.gif
void  CleanUp()
InBlock.gif {
InBlock.gif    if (g_pD3DDevice != NULL)
InBlock.gif   {
InBlock.gif     g_pD3DDevice->Release();
InBlock.gif     g_pD3DDevice = NULL;
InBlock.gif   }
InBlock.gif
   if (g_pD3D != NULL)
InBlock.gif   {
InBlock.gif     g_pD3D->Release();
InBlock.gif     g_pD3D = NULL;
InBlock.gif   }
InBlock.gif }
InBlock.gif
void  GameLoop()
InBlock.gif {
InBlock.gif    //进入游戏循环
InBlock.gif   MSG msg; 
InBlock.gif   BOOL fMessage;
InBlock.gif
  PeekMessage(&msg, NULL, 0U, 0U, PM_NOREMOVE);
InBlock.gif
   while (msg.message != WM_QUIT)
InBlock.gif   {
InBlock.gif     fMessage = PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE);
InBlock.gif
     if (fMessage)
InBlock.gif     {
InBlock.gif        //处理消息
InBlock.gif       TranslateMessage(&msg);
InBlock.gif       DispatchMessage(&msg);
InBlock.gif     }
InBlock.gif      else
InBlock.gif     {
InBlock.gif        //没有要处理的消息,所以渲染当前场景
InBlock.gif       Render();
InBlock.gif     }
InBlock.gif
  }
InBlock.gif }
InBlock.gif
//窗口消息处理
InBlock.gif LRESULT WINAPI WinProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
InBlock.gif {
InBlock.gif    switch (msg)
InBlock.gif   {
InBlock.gif    case  WM_DESTROY:
InBlock.gif     PostQuitMessage(0);
InBlock.gif      return  0;
InBlock.gif      break ;
InBlock.gif    case  WM_KEYUP: 
InBlock.gif      switch  (wParam)
InBlock.gif     { 
InBlock.gif      case  VK_ESCAPE:
InBlock.gif        //用户已经按了ESC键,所以退出
InBlock.gif       DestroyWindow(hWnd);
InBlock.gif        return  0;
InBlock.gif        break ;
InBlock.gif     } 
InBlock.gif      break ;
InBlock.gif
  }
InBlock.gif
   return  DefWindowProc(hWnd, msg, wParam, lParam);
InBlock.gif }
InBlock.gif
//应用程序入口点
InBlock.gif INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, INT)
InBlock.gif {
InBlock.gif    //注册窗口类
InBlock.gif   WNDCLASSEX wc = { sizeof (WNDCLASSEX), CS_CLASSDC, WinProc, 0L, 0L, 
InBlock.gif     GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
InBlock.gif      "DX Project 1" , NULL};
InBlock.gif   RegisterClassEx(&wc);
InBlock.gif
   //创建应用程序的窗口
InBlock.gif   HWND hWnd = CreateWindow( "DX Project 1" "www.andypike.com: Tutorial 1"
InBlock.gif     WS_OVERLAPPEDWINDOW, 50, 50, 500, 500,
InBlock.gif     GetDesktopWindow(), NULL, wc.hInstance, NULL);
InBlock.gif
   //初始化 Direct3D
InBlock.gif    if (SUCCEEDED(InitialiseD3D(hWnd)))
InBlock.gif   { 
InBlock.gif      //显示我们的窗体
InBlock.gif     ShowWindow(hWnd, SW_SHOWDEFAULT);
InBlock.gif     UpdateWindow(hWnd);
InBlock.gif
     //启动游戏运行:进入游戏循环
InBlock.gif     GameLoop();
InBlock.gif   }
InBlock.gif
  CleanUp();
InBlock.gif
  UnregisterClass( "DX Project 1" , wc.hInstance);
InBlock.gif
   return  0;

InBlock.gif}






 本文转自 xcf007 51CTO博客,原文链接:http://blog.51cto.com/xcf007/325454,如需转载请自行联系原作者

相关文章
|
9月前
|
Web App开发 JSON 算法
DY个人视频列表 最新
DY个人视频列表 最新
|
数据采集 机器学习/深度学习 自然语言处理
sent2vec教程
sent2vec是用于无监督学习词、短文本、句的Python包。本文是sent2vec的简易教程,包括安装教程和简单的使用方法。文中使用英语文本作为示例。 sent2vec除文中所提及内容之外的功能,以后可能会继续补充到本博文中。
|
JSON 数据格式
Matrix 之 FrameTracer 源码分析
Matrix 之 FrameTracer 源码分析
135 0
|
Shell Perl 数据采集
|
Web App开发
dx安装的问题
系统是win10,安装一个软件时需要安装到DX,然而安装DX时出现了以下提示因为之前在win7上也安装过这个软件,在安装DX时也没有出现问题,所以感觉跟软件是没有关系的,百度了一下,发现出现这个问题的人还很多,尝试了几个答案1、将sysWOW里的directx文件删除再重装,失败2、右键DX安装包,选择管理员运行,失败到这里我也知道了是DX安装的问题,只要将DX安装好后软件就可以使用了。
760 0
|
开发工具 C++

热门文章

最新文章