顶点开关DX

时间:2018-12-25 17:48:18

标签: c++ directx direct3d vertex directx-9

所以我的问题有点简单。我有一个顶点缓冲区,我用

创建它
    pDevice->CreateVertexBuffer(
        m_dwCount * sizeof(CUSTOMVERTEX)),
        0,
        CUSTOMFVF,
        D3DPOOL_MANAGED,
        &m_pVB, NULL);

然后,出于测试目的,我想修改所有这些内容并将它们相乘。我究竟该如何锁定所有这些对象然后乘以它们?我试图锁定它

    CUSTOMVERTEX* pVoid;
    pVB->Lock(0, 0, (void**)&pVoid, 0);

但是我假设不会锁定整个缓冲区。我对DirectX有点陌生,所以对这个问题太愚蠢感到抱歉,但是感谢任何人的帮助。

1 个答案:

答案 0 :(得分:1)

首先创建您的相乘顶点(例如,称为newVertices)。然后,您需要lock的顶点缓冲区并获得指向当前顶点的指针,如下所示:

CUSTOMVERTEX* pVertices;
HRESULT hr = m_pVB->Lock(0, 0, reinterpret_cast<void**>(&pVertices), 0);

然后,您可以使用memcpy像这样将新的顶点替换为它:

if(hr == S_OK)
    memcpy(pVertices, newVertices, num_of_vertices * sizeof(CUSTOMVERTEX));

然后unlock像这样顶点缓冲:

hr = m_pVB->Unlock();