zoukankan      html  css  js  c++  java
  • 一个简单的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();
    }


    ...

  • 相关阅读:
    基于分布式思想下的RPC解决方案--笔记
    前端对页面展示修改出现的问题------行内块元素(标签)、行内元素(标签)、块元素(标签)的区别
    POI读取带有图片(图片有的是合并单元格的)的商品列表Excel
    Springboot 默认加载文件(可直接访问、不可直接访问)是出现的问题
    for循环快还是递归快
    try catch finally 中遇到的return问题(经典)
    为什么阿里巴巴禁止在 foreach 循环里进行元素的 remove/add 操作
    数据结构Java实现03----单向链表的插入和删除
    匿名内部类详解(粗略)
    非法字符: 'ufeff' idea下的解决方案
  • 原文地址:https://www.cnblogs.com/gameprogram/p/2286171.html
Copyright © 2011-2022 走看看