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.FVFフィールドには、頂点で使用されるフィールドを示す柔軟な頂点フォーマット マスクが含まれます (ここにリストされているように)。頂点フォーマットを記述する別の方法として、頂点宣言を使用する方法があります。これは、もう少し記述的ですが、この記事では 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 に答える