• Template


    创建win32应用程序空工程

    //main.cpp
    //time: 01/08/2013

    #include<d3d9.h>
    #include <d3dx9.h>

    #pragma comment(lib,"d3d9.lib")
    #pragma comment(lib,"d3dx9.lib")

    #define WINDOW_CLASS "UGPDX"
    #define WINDOW_NAME  "Template"
    #define WINDOW_WIDTH  640
    #define WINDOW_HEIGHT 480

    bool InitializeD3D(HWND hWnd,bool fullscreen);
    bool InitializeObjects();
    void RenderScene();
    void Shutdown();

    //Direct3D object and device
    LPDIRECT3D9 g_D3D=NULL;
    LPDIRECT3DDEVICE9 g_D3DDevice=NULL;

    //Matrices  矩阵
    D3DXMATRIX g_projection;
    D3DXMATRIX g_ViewMatrix;
    D3DXMATRIX g_WorldMatrix;

    LRESULT WINAPI MsgProc(HWND hWnd,UINT msg,WPARAM wp,LPARAM lp)
    {
     switch(msg)
     {
     case WM_DESTROY:
      PostQuitMessage(0);
      return 0;
      break;

     case WM_KEYUP:
      if(wp == VK_ESCAPE) PostQuitMessage(0);
      break;
     }
        return DefWindowProc(hWnd,msg,wp,lp);
    }

    int WINAPI WinMain(HINSTANCE hInst,HINSTANCE ph,LPSTR cmd,int s)
    {
     WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
      GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
      WINDOW_CLASS, NULL };

     RegisterClassEx(&wc);
     HWND hWnd = CreateWindow(WINDOW_CLASS, WINDOW_NAME,
      WS_OVERLAPPEDWINDOW, 100, 100, WINDOW_WIDTH, WINDOW_HEIGHT,
      GetDesktopWindow(), NULL, wc.hInstance, NULL);

     // Initialize Direct3D
     if(InitializeD3D(hWnd, false))
     {
      // Show the window
      ShowWindow(hWnd, SW_SHOWDEFAULT);
      UpdateWindow(hWnd);

      // Enter the message loop
      MSG msg;
      ZeroMemory(&msg, sizeof(msg));

      while(msg.message != WM_QUIT)
      {
       if(PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))
       {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
       }
       else
        RenderScene();
      }
     }

     // Release any and all resources.
     Shutdown();

     // Unregister our window.
     UnregisterClass(WINDOW_CLASS, wc.hInstance);
     return 0;
    }

    bool InitializeD3D(HWND hWnd, bool fullscreen)
    {
     D3DDISPLAYMODE displayMode;

     // Create the D3D object.
     g_D3D = Direct3DCreate9(D3D_SDK_VERSION);
     if(g_D3D == NULL) return false;

     // Get the desktop display mode.
     if(FAILED(g_D3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,
      &displayMode))) return false;

     // Set up the structure used to create the D3DDevice
     D3DPRESENT_PARAMETERS d3dpp;
     ZeroMemory(&d3dpp, sizeof(d3dpp));

     if(fullscreen)
     {
      d3dpp.Windowed = FALSE;
      d3dpp.BackBufferWidth = WINDOW_WIDTH;
      d3dpp.BackBufferHeight = WINDOW_HEIGHT;
     }
     else
      d3dpp.Windowed = TRUE;
     d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
     d3dpp.BackBufferFormat = displayMode.Format;

     // Create the D3DDevice
     if(FAILED(g_D3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
      hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_PUREDEVICE,
      &d3dpp, &g_D3DDevice))) return false;


     // Initialize any objects we will be displaying.
     if(!InitializeObjects()) return false;

     return true;
    }


    bool InitializeObjects()
    {
     // Set the projection matrix.
     D3DXMatrixPerspectiveFovLH(&g_projection, 45.0f,
      WINDOW_WIDTH/WINDOW_HEIGHT, 0.1f, 1000.0f);

     g_D3DDevice->SetTransform(D3DTS_PROJECTION, &g_projection);

     // Set default rendering states.
     g_D3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE);

     // Define camera information.
     D3DXVECTOR3 cameraPos(0.0f, 0.0f, -1.0f);
     D3DXVECTOR3 lookAtPos(0.0f, 0.0f, 0.0f);
     D3DXVECTOR3 upDir(0.0f, 1.0f, 0.0f);

     // Build view matrix.
     D3DXMatrixLookAtLH(&g_ViewMatrix, &cameraPos,
      &lookAtPos, &upDir);

     return true;
    }


    void RenderScene()
    {
     // Clear the back buffer.
     g_D3DDevice->Clear(0, NULL, D3DCLEAR_TARGET,
      D3DCOLOR_XRGB(0,0,0), 1.0f, 0);

     // Begin the scene.  Start rendering.
     g_D3DDevice->BeginScene();

     // Apply the view (camera).
     g_D3DDevice->SetTransform(D3DTS_VIEW, &g_ViewMatrix);

     // End the scene.  Stop rendering.
     g_D3DDevice->EndScene();

     // Display the scene.
     g_D3DDevice->Present(NULL, NULL, NULL, NULL);
    }


    void Shutdown()
    {
     if(g_D3DDevice != NULL) g_D3DDevice->Release();
     if(g_D3D != NULL) g_D3D->Release();

     g_D3DDevice = NULL;
     g_D3D = NULL;
    }

  • 相关阅读:
    C++基础知识(二)
    C++基础知识(一)
    RT-thread 设备驱动组件之IIC总线设备
    RT-thread 设备驱动组件之SPI设备
    RT thread 设备驱动组件之USART设备
    RT-thread 设备驱动组件之PIN设备
    RT-thread finsh组件工作流程
    C语言知识点
    RT-thread main函数分析
    堆和栈的区别
  • 原文地址:https://www.cnblogs.com/batman425/p/3229613.html
Copyright © 2020-2023  润新知