zoukankan      html  css  js  c++  java
  • 15. D3D画茶壶,球,立方体,圆环

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

    #define WINDOW_CLASS "UGPDX"
    #define WINDOW_NAME "Built-in Direct3D Shapes"
    #define WINDOW_WIDTH 640
    #define WINDOW_HEIGHT 480

    // Function Prototypes...
    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;

    // Mesh objects
    LPD3DXMESH g_teapot = NULL;
    LPD3DXMESH g_cube
    = NULL;
    LPD3DXMESH g_sphere
    = NULL;
    LPD3DXMESH g_torus
    = NULL;


    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)
    {
    // Register the window class
    WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
    GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
    WINDOW_CLASS, NULL };
    RegisterClassEx(
    &wc);

    // Create the application's window
    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_SOFTWARE_VERTEXPROCESSING,
    &d3dpp,
    &g_D3DDevice))) return false;

    // 设置投影矩阵
    D3DXMatrixPerspectiveFovLH(&g_projection, 45.0f,
    WINDOW_WIDTH
    /WINDOW_HEIGHT, 0.1f, 1000.0f);
    g_D3DDevice
    ->SetTransform(D3DTS_PROJECTION, &g_projection);

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

    return true;
    }


    bool InitializeObjects()
    {
    // Set default rendering states. 关闭光源
    g_D3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE);

    // Create the objects.
    if(FAILED(D3DXCreateTeapot(g_D3DDevice, &g_teapot, NULL)))
    return false;
    if(FAILED(D3DXCreateBox(g_D3DDevice, 2, 2, 2, &g_cube, NULL)))
    return false;
    if(FAILED(D3DXCreateSphere(g_D3DDevice, 1.5, 25, 25,
    &g_sphere, NULL))) return false;
    if(FAILED(D3DXCreateTorus(g_D3DDevice, 0.5f, 1.2f, 25, 25,
    &g_torus, NULL))) return false;

    // Define camera information. 试图矩阵 摄像机
    D3DXVECTOR3 cameraPos(0.0f, 0.0f, -8.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 backbuffer.
    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);

    // Draw teapot. 设置世界矩阵
    D3DXMatrixTranslation(&g_WorldMatrix, 2.0f, -2.0, 0.0f);
    g_D3DDevice
    ->SetTransform(D3DTS_WORLD, &g_WorldMatrix);
    g_teapot
    ->DrawSubset(0);

    // Draw Cube.
    D3DXMatrixTranslation(&g_WorldMatrix, -2.0f, -2.0, 0.0f);
    g_D3DDevice
    ->SetTransform(D3DTS_WORLD, &g_WorldMatrix);
    g_cube
    ->DrawSubset(0);

    // Draw Sphere.
    D3DXMatrixTranslation(&g_WorldMatrix, 2.0f, 2.0, 0.0f);
    g_D3DDevice
    ->SetTransform(D3DTS_WORLD, &g_WorldMatrix);
    g_sphere
    ->DrawSubset(0);

    // Draw Torus.
    D3DXMatrixTranslation(&g_WorldMatrix, -2.0f, 2.0, 0.0f);
    g_D3DDevice
    ->SetTransform(D3DTS_WORLD, &g_WorldMatrix);
    g_torus
    ->DrawSubset(0);

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

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


    void Shutdown()
    {
    // Release all resources.
    if(g_D3DDevice != NULL) g_D3DDevice->Release();
    if(g_D3D != NULL) g_D3D->Release();
    if(g_teapot != NULL) { g_teapot->Release(); g_teapot = NULL; }
    if(g_cube != NULL) { g_cube->Release(); g_cube = NULL; }
    if(g_sphere != NULL) { g_sphere->Release(); g_sphere = NULL; }
    if(g_torus != NULL) { g_torus->Release(); g_torus = NULL; }
    }

      

  • 相关阅读:
    浅谈流形学习
    变分例子
    变分
    基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN,Faster R-CNN
    模拟退火
    粒子群算法
    JavaEE Tutorials (24)
    洛谷 P2026 求一次函数解析式
    洛谷 P1598 垂直柱状图
    洛谷 P1781 宇宙总统
  • 原文地址:https://www.cnblogs.com/kex1n/p/2148007.html
Copyright © 2011-2022 走看看