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