Direct3D9否绘制?

问题描述 投票:0回答:1

我需要绘制一些简单的形状,所以我决定使用D3D9。在学习了directxtutorial.com上的一些教程之后,我终于有了使我的第一个形状出现在屏幕上所需的所有代码和知识。但问题是,没有图像出现。我查看了很多遍代码,并将其与网站上的代码进行了比较,所有这些都已签出。为什么屏幕上没有任何渲染?

    #define CUSTOMFVF (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)

    LPDIRECT3D9 d3d;
    LPDIRECT3DDEVICE9 d3ddev;

    LPDIRECT3DVERTEXBUFFER9 vbuffer;

    struct CUSTOMVERTEX
    {
        float x, y, z, rhw;
        DWORD color;
    };

    void InitD3D(HWND hWnd)
    {
        d3d = Direct3DCreate9(D3D_SDK_VERSION);

        D3DPRESENT_PARAMETERS d3dpp;
        ZeroMemory(&d3dpp, sizeof(d3dpp));

        d3dpp.Windowed = true;
        d3dpp.hDeviceWindow = hWnd;
        d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;

        d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &d3ddev);
    }

void InitGraphics()
{
    CUSTOMVERTEX verticies[]
    {
        {50, 70, 1.0f, 1.0f, D3DCOLOR_XRGB(250, 0, 0),},
        {70, 50, 1.0f, 1.0f, D3DCOLOR_XRGB(0, 250, 0),},
        {40, 80, 1.0f, 1.0f, D3DCOLOR_XRGB(0, 0, 250),},
    };

    d3ddev->CreateVertexBuffer(3 * sizeof(CUSTOMVERTEX), NULL, CUSTOMFVF, D3DPOOL_MANAGED, &vbuffer, NULL);

    void* vp;

    vbuffer->Lock(0, 0, (void**)&vp, NULL);

    memcpy(vp, verticies, sizeof(verticies));

    vbuffer->Unlock();
}

void Draw()
{
    d3ddev->Clear(NULL, NULL, D3DCLEAR_TARGET, NULL, 1.0f, NULL);

    d3ddev->BeginScene();

    d3ddev->SetFVF(CUSTOMFVF);
    d3ddev->SetStreamSource(0, vbuffer, 0, sizeof(CUSTOMVERTEX));
    d3ddev->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 1);

    d3ddev->EndScene();
    d3ddev->Present(NULL, NULL, NULL, NULL);
}

void ReleaseD3D()
{
    d3d->Release();
    d3ddev->Release();
    vbuffer->Release();
}
directx direct3d directx-9 direct3d9
1个回答
0
投票

证明我的顶点位置不足以构成三角形的三角形。不过,感谢您的帮助,它提醒我设置错误检查。

© www.soinside.com 2019 - 2024. All rights reserved.