• 一个简单的DX的例子


    编辑器加载中

    #include <Windows.h>
    #include <d3dx9.h>
    #include <MMSystem.h>



    LPDIRECT3D9 g_pD3D;
    LPDIRECT3DDEVICE9 g_pd3dDevice;
    LPDIRECT3DVERTEXBUFFER9 g_pVB;


    struct CUSTOMVERTEX
    {
    FLOAT x, y, z;
    DWORD color;
    };

    #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_DIFFUSE)

    HRESULT InitObject()
    {
    CUSTOMVERTEX triangle[] =
    {
    { -1.0f,-1.0f, 0.0f, 0xffff0000, },
    { 1.0f,-1.0f, 0.0f, 0xff0000ff, },
    { 0.0f, 1.0f, 0.0f, 0xffffffff, },

    };

    if (FAILED(g_pd3dDevice->CreateVertexBuffer(3*sizeof(CUSTOMVERTEX),0, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVB, NULL)))
    return E_FAIL;

    VOID* pVertices;
    if (FAILED(g_pVB->Lock(0,sizeof(triangle), &pVertices, 0)))
    return E_FAIL;

    memcpy(pVertices, triangle, sizeof(triangle));

    g_pVB->Unlock();

    return S_OK;
    }

    HRESULT InitD3D(HWND hWnd)
    {
    g_pD3D = Direct3DCreate9(D3D_SDK_VERSION);
    if (NULL == g_pD3D)
    return E_FAIL;

    D3DPRESENT_PARAMETERS d3dpp;
    ZeroMemory(&d3dpp, sizeof(d3dpp));
    d3dpp.Windowed = TRUE;
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;

    if(FAILED( g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,
    hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING,
    &d3dpp, &g_pd3dDevice)))
    {
    return E_FAIL;
    }


    g_pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);

    // Turn off D3D lighting, since we are providing our own vertex colors
    g_pd3dDevice->SetRenderState( D3DRS_LIGHTING, FALSE );

    if (FAILED(InitObject()))
    return E_FAIL;


    return S_OK;
    }

    void SetupMatrices()
    {
    D3DXMATRIX matWorld;
    UINT iTime = timeGetTime() % 1000;
    FLOAT fAngle = iTime * ( 2.0f * D3DX_PI ) / 1000.0f;
    D3DXMatrixRotationY(&matWorld, fAngle);
    g_pd3dDevice->SetTransform(D3DTS_WORLD, &matWorld);

    D3DXVECTOR3 vEyePt(0.0f, 3.0f, -5.0f);
    D3DXVECTOR3 vLookAtPt(0.0f, 0.0f, 0.0f);
    D3DXVECTOR3 vUp(0.0f, 1.0f, 0.0f);
    D3DXMATRIXA16 matView;
    D3DXMatrixLookAtLH(&matView, &vEyePt, &vLookAtPt, &vUp);
    g_pd3dDevice->SetTransform(D3DTS_VIEW, &matView);

    D3DXMATRIX matPoj;
    D3DXMatrixPerspectiveFovLH(&matPoj, D3DX_PI/4, 1.0f, 1.0f, 100.0f);
    g_pd3dDevice->SetTransform(D3DTS_PROJECTION, &matPoj);


    }

    void Render()
    {
    g_pd3dDevice->Clear(0,NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 255), 1.0f, 0);

    g_pd3dDevice->BeginScene();
    SetupMatrices();

    g_pd3dDevice->SetStreamSource(0, g_pVB, 0, sizeof(CUSTOMVERTEX));
    g_pd3dDevice->SetFVF(D3DFVF_CUSTOMVERTEX);
    g_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);

    g_pd3dDevice->EndScene();

    g_pd3dDevice->Present(NULL, NULL, NULL, NULL);
    }

    void Cleanup()
    {
    if (g_pd3dDevice)
    g_pd3dDevice->Release();

    if (g_pD3D)
    g_pD3D->Release();

    if (g_pVB)
    g_pVB->Release();
    }

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

    case WM_PAINT:
    ValidateRect(hWnd, NULL);
    return 0;
    }

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

    INT WINAPI WinMain(__in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd )
    {
    WNDCLASSEX wc = {sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0, 0,
    GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
    "Direct3D", NULL};

    RegisterClassEx(&wc);

    // Create the application window
    HWND hWnd = CreateWindow("Direct3D", "Learn", WS_OVERLAPPEDWINDOW,
    100, 100, 300, 300,
    GetDesktopWindow(), NULL, wc.hInstance, NULL);

    //ShowWindow(hWnd, SW_SHOW);
    if (SUCCEEDED(InitD3D(hWnd)))
    {
    ShowWindow(hWnd, SW_SHOWDEFAULT);
    UpdateWindow(hWnd);

    MSG msg;
    ZeroMemory(&msg, sizeof(msg));

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


    }



    UnregisterClass( "Direct3D", wc.hInstance );

    Cleanup();
    }


    ...

  • 相关阅读:
    Oracle 组件 系列 小结
    Oracle Data Mining 组件 说明
    GIS空间索引(有了思路代码还不是手到擒来)
    完成端口与高性能服务器程序开发(转)
    const? const ! 全解
    服务器架构
    SDL 源码分析(2)
    数据结构个算法学习笔记(2)
    高性能服务器架构 的几个注意点 (HighPerformance Server Architecture)
    GIS底层开发总结
  • 原文地址:https://www.cnblogs.com/gameprogram/p/2286171.html
Copyright © 2020-2023  润新知