zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    Write an algorithm such that if an element in an MxN matrix is 0, its entire row and column is set to 0.
    旋转二维数组
    replace empty char with new string,unsafe method和native implementation的性能比较
    判断一字符串是否可以另一字符串重新排列而成
    移除重复字符的几个算法简单比较
    也来纠结一下字符串翻转
    判断重复字符存在:更有意义一点
    程序员常去网站汇总
    sublime
    针对程序集 'SqlServerTime' 的 ALTER ASSEMBLY 失败,因为程序集 'SqlServerTime' 未获授权(PERMISSION_SET = EXTERNAL_ACCESS)
  • 原文地址:https://www.cnblogs.com/batman425/p/3229613.html
Copyright © 2011-2022 走看看