0

如何正确获取 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();
}
4

1 回答 1

2

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

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

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

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

struct Vertex
{
    D3DXVECTOR3 position;
    D3DXVECTOR3 normal;
    D3DCOLOR diffuse;
    float tu, tv;
};
于 2013-06-15T19:15:40.037 回答