获取LPDIRECT3DVERTEXBUFFER9上的顶点内容

时间:2013-06-15 18:36:19

标签: c++ directx

如何正确获取LPDIRECT3DVERTEXBUFFER9上的顶点内容? 当我启动它以后再渲染时,我知道使用了哪些顶点和它们的大小,但假设我没有,是否可能以后将它们变为指针?

LPDIRECT3DVERTEXBUFFER9 Stream_Data;
if(p1->GetStreamSource(0, &Stream_Data, &Offset, &XStride) == D3D_OK)
{
    void* pVoid;
    Stream_Data->Lock(0, 0, (void**)&pVoid, 0);
    memcpy( ??????, pVoid, sizeof( ?????? ) );
    Stream_Data->Unlock();

    Stream_Data->Release();
}

1 个答案:

答案 0 :(得分:2)

顶点格式是用户定义的,尽管有多种方法可以检索它:

D3DVERTEXBUFFER_DESC desc;
Stream_Data->GetDesc(&desc);

现在,desc.FVF字段将包含灵活的顶点格式掩码,该掩码告诉您在顶点中使用了哪些字段(如列出的here)。描述顶点格式的另一种方法是使用顶点声明,虽然this article描述了如何从FVF获取顶点声明,但它更具描述性。

例如,您可能会获得以下FVF:D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_DIFFUSE | D3DFVF_TEX1。这将对应于以下顶点结构:

struct Vertex
{
    D3DXVECTOR3 position;
    D3DXVECTOR3 normal;
    D3DCOLOR diffuse;
    float tu, tv;
};