zoukankan      html  css  js  c++  java
  • 3D游戏从头编之D3D(1)

    这个是D3D入门学习,

    效果:

    引用 3D游戏从头编之D3D(1) - 迷茫 - bendanchenzhicheng的博客

    #include <d3d8.h>

    LPDIRECT3D8             g_pD3D       = NULL; // 用来创建D3D设备
    LPDIRECT3DDEVICE8       g_pd3dDevice = NULL; // D3D设备

    // 初始化D3D
    HRESULT InitD3D( HWND hWnd )
    {
     // 创建D3D对象
     if( NULL == ( g_pD3D = Direct3DCreate8( D3D_SDK_VERSION ) ) )
      return E_FAIL;

     // 获取当前的显示模式
     D3DDISPLAYMODE d3ddm;
     if( FAILED( g_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm ) ) )
      return E_FAIL;

     D3DPRESENT_PARAMETERS d3dpp; 
     ZeroMemory( &d3dpp, sizeof(d3dpp) );
     d3dpp.Windowed = TRUE;    // 窗口模式
     d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; // 设置交换模式
     d3dpp.BackBufferFormat = d3ddm.Format;  // 设置背景缓冲区格式为当前左面格式

     // 创建D3D设备
     // 第一个参数:使用默认的显卡适配器
     // 第二个参数:请求使用硬件抽象层(HAL)
     // 第三个参数:窗口句柄
     // 第四个参数:使用软件处理顶点
     // 第五个参数:创建的参数
     // 第六个参数:创建的D3D设备指针
     if( FAILED( g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, 
           D3DDEVTYPE_HAL, 
           hWnd,
           D3DCREATE_SOFTWARE_VERTEXPROCESSING,
           &d3dpp, 
           &g_pd3dDevice ) ) )
     {
      return E_FAIL;
     }

     return S_OK;
    }

    // 释放D3D
    VOID Cleanup()
    {
     if( g_pd3dDevice != NULL) 
      g_pd3dDevice->Release();

     if( g_pD3D != NULL)
      g_pD3D->Release();
    }

    // 渲染
    VOID Render()
    {
     if( NULL == g_pd3dDevice )
      return;

     // 清除背景为兰色
     g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );

     // 开始绘制场景
     g_pd3dDevice->BeginScene();

     // 这里绘制你需要的东西

     // 结束场景绘制
     g_pd3dDevice->EndScene();

     // 显示到屏幕上
     g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
    }


    // 消息处理
    LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
    {
     switch( msg )
     {
      case WM_DESTROY: // 退出消息
       PostQuitMessage( 0 );
       return 0;

      case WM_PAINT:  // 绘制
       Render();
       ValidateRect( hWnd, NULL );
       return 0;
     }

     return DefWindowProc( hWnd, msg, wParam, lParam );
    }

    // WinMain程序入口
    INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
    {
     // 注册窗口类
     WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L, 
         GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
         "D3D Tutorial", NULL };
     RegisterClassEx( &wc );

     // 创建窗口
     HWND hWnd = CreateWindow( "D3D Tutorial", "D3D Tutorial 01: CreateDevice", 
          WS_OVERLAPPEDWINDOW, 100, 100, 300, 300,
          GetDesktopWindow(), NULL, wc.hInstance, NULL );

     // 初始化D3D
     if( SUCCEEDED( InitD3D( hWnd ) ) )
     { 
      // 显示窗口
      ShowWindow( hWnd, SW_SHOWDEFAULT );
      UpdateWindow( hWnd );

      // 消息循环
      MSG msg; 
      while( GetMessage( &msg, NULL, 0, 0 ) )
      {
       TranslateMessage( &msg );
       DispatchMessage( &msg );
      }
     }

     // 结束处理
     Cleanup();
     UnregisterClass( "D3D Tutorial", wc.hInstance );
     return 0;
    }

  • 相关阅读:
    ultraEdit使用utf8乱码的解决办法
    利用替换字符串的函数StringReplace删除字符串中指定的字符或字符串
    COBID,CanID,NodeID的不同
    随机生成一个10位的数字(来自大富翁)
    Delphi2010下,Unit aliases会影响到Code Insight功能?
    使用鼠标拖曳的方式移动、更改panel控件的大小
    将四个BYTE数值转换成IEEE754标准的浮点数
    判断shift,ctrl,alt键是否按下
    获取邮箱中的用户名
    IFM控制器中关于支线长度的说明
  • 原文地址:https://www.cnblogs.com/bendanchenzhicheng/p/DirectX.html
Copyright © 2011-2022 走看看