同标题

解决方案 »

  1.   

    directx下面有很多部分,directshow、directsound、directgraphics等等,每一个都不一样,你这样说别人都不能理解是什么意思。
      

  2.   

    编译MSDN第一张后面的SDK\GRAPHY\DX
    例子
      

  3.   

    源码
    #include <d3d8.h>LPDIRECT3D8 g_pD3D = NULL;
    LPDIRECT3DDEVICE8 g_pD3DDevice = NULL;
    LPDIRECT3DVERTEXBUFFER8 g_pVertexBuffer = NULL; // Buffer to hold vertices
    struct CUSTOMVERTEX
    {
        FLOAT x, y, z, rhw; // The transformed position for the vertex.
        DWORD colour; // The vertex colour.
    };#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW|D3DFVF_DIFFUSE)#define SafeRelease(pObject) if(pObject != NULL) {pObject->Release(); pObject=NULL;}HRESULT InitialiseD3D(HWND hWnd)
    {
        //First of all, create the main D3D object. If it is created successfully we 
        //should get a pointer to an IDirect3D8 interface.
        g_pD3D = Direct3DCreate8(D3D_SDK_VERSION);
        if(g_pD3D == NULL)
        {
            return E_FAIL;
        }    //Get the current display mode
        D3DDISPLAYMODE d3ddm;
        if(FAILED(g_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm)))
        {
            return E_FAIL;
        }    //Create a structure to hold the settings for our device
        D3DPRESENT_PARAMETERS d3dpp; 
        ZeroMemory(&d3dpp, sizeof(d3dpp));    //Fill the structure. 
        //We want our program to be windowed, and set the back buffer to a format
        //that matches our current display mode
        d3dpp.Windowed = TRUE;
        d3dpp.SwapEffect = D3DSWAPEFFECT_COPY_VSYNC;
        d3dpp.BackBufferFormat = d3ddm.Format;    //Create a Direct3D device.
        if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, 
                                       D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pD3DDevice)))
        {
            return E_FAIL;
        }
        
        return S_OK;
    }HRESULT InitialiseVertexBuffer()
    {
    VOID* pVertices;

    //Store each point of the triangle together with it's colour
    CUSTOMVERTEX cvVertices[] =
    {
    {250.0f, 100.0f, 0.5f, 1.0f, D3DCOLOR_XRGB(255, 0, 0),}, //Vertex 1 - Red (250, 100)
    {400.0f, 350.0f, 0.5f, 1.0f, D3DCOLOR_XRGB(0, 255, 0),}, //Vertex 2 - Green (400, 350)
    {100.0f, 350.0f, 0.5f, 1.0f, D3DCOLOR_XRGB(0, 0, 255),}, //Vertex 3 - Blue (100, 350)
    }; //Create the vertex buffer from our device
    if(FAILED(g_pD3DDevice->CreateVertexBuffer(3 * sizeof(CUSTOMVERTEX),
                                                   0, D3DFVF_CUSTOMVERTEX,
                                                   D3DPOOL_DEFAULT, &g_pVertexBuffer)))
    {
    return E_FAIL;
    } //Get a pointer to the vertex buffer vertices and lock the vertex buffer
    if(FAILED(g_pVertexBuffer->Lock(0, sizeof(cvVertices), (BYTE**)&pVertices, 0)))
    {
    return E_FAIL;
    } //Copy our stored vertices values into the vertex buffer
    memcpy(pVertices, cvVertices, sizeof(cvVertices)); //Unlock the vertex buffer
    g_pVertexBuffer->Unlock();    return S_OK;
    }void Render()
    {
        if(g_pD3DDevice == NULL)
        {
            return;
        }    //Clear the backbuffer to black
        g_pD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0);
        
        //Begin the scene
        g_pD3DDevice->BeginScene();
            //Rendering our triangle
    g_pD3DDevice->SetStreamSource(0, g_pVertexBuffer, sizeof(CUSTOMVERTEX));
    g_pD3DDevice->SetVertexShader(D3DFVF_CUSTOMVERTEX);
    g_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);
        //End the scene
        g_pD3DDevice->EndScene();
        
        //Filp the back and front buffers so that whatever has been rendered on the back buffer
        //will now be visible on screen (front buffer).
        g_pD3DDevice->Present(NULL, NULL, NULL, NULL);
    }void CleanUp()
    {
    SafeRelease(g_pVertexBuffer);
    SafeRelease(g_pD3DDevice);
    SafeRelease(g_pD3D);
    }void GameLoop()
    {
        //Enter the game loop
        MSG msg; 
        BOOL fMessage;    PeekMessage(&msg, NULL, 0U, 0U, PM_NOREMOVE);
        
        while(msg.message != WM_QUIT)
        {
            fMessage = PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE);        if(fMessage)
            {
                //Process message
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
            else
            {
                //No message to process, so render the current scene
                Render();
            }    }
    }//The windows message handler
    LRESULT WINAPI WinProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
        switch(msg)
        {
            case WM_DESTROY:
                PostQuitMessage(0);
                return 0;
            break;
            case WM_KEYUP: 
                switch (wParam)
                { 
                    case VK_ESCAPE:
                        //User has pressed the escape key, so quit
                        DestroyWindow(hWnd);
                        return 0;
                    break;
                } 
            break;    }    return DefWindowProc(hWnd, msg, wParam, lParam);
    }//Application entry point
    INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, INT)
    {
        //Register the window class
        WNDCLASSEX wc = {sizeof(WNDCLASSEX), CS_CLASSDC, WinProc, 0L, 0L, 
                         GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
                         "DX Project 2", NULL};
        RegisterClassEx(&wc);    //Create the application's window
        HWND hWnd = CreateWindow("DX Project 2", "www.andypike.com: Tutorial 2", 
                                  WS_OVERLAPPEDWINDOW, 50, 50, 500, 500,
                                  GetDesktopWindow(), NULL, wc.hInstance, NULL);    //Initialize Direct3D
        if(SUCCEEDED(InitialiseD3D(hWnd)))
        { 
            //Show our window
            ShowWindow(hWnd, SW_SHOWDEFAULT);
            UpdateWindow(hWnd); //Initialize Vertex Buffer
    if(SUCCEEDED(InitialiseVertexBuffer()))
    {
    //Start game running: Enter the game loop
    GameLoop();
    }
        }
        
        CleanUp();    UnregisterClass("DX Project 2", wc.hInstance);
        
        return 0;
    }