Condividi tramite


Creazione di un vertex Buffer (Direct3D 9)

Per creare un oggetto vertex buffer, chiamare il metodo IDirect3DDevice9::CreateVertexBuffer , che accetta cinque parametri. Il primo parametro specifica la lunghezza del buffer dei vertici, espressa in byte. Utilizzare l'operatore sizeof per determinare le dimensioni di un formato di vertice, in byte. Si consideri il formato di vertice personalizzato seguente.

struct CUSTOMVERTEX {
        FLOAT x, y, z;
        FLOAT rhw;
        DWORD color;
        FLOAT tu, tv;   // Texture coordinates
};

// Custom flexible vertex format (FVF) describing the custom vertex structure
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1)

Per creare un buffer dei vertici per contenere quattro strutture CUSTOMVERTEX, specificare [4*sizeof(CUSTOMVERTEX)] per il parametro Length .

Il secondo parametro è un set di controlli di utilizzo. Tra le altre cose, il valore determina se il buffer dei vertici è in grado di contenere informazioni di ritaglio, sotto forma di flag di ritaglio, per i vertici presenti all'esterno dell'area di visualizzazione. Per creare un buffer dei vertici che non può contenere flag di clip, includere il flag D3DUSAGE_DONOTCLIP per il parametro Usage . Il flag D3DUSAGE_DONOTCLIP viene applicato solo se si indica anche che il buffer dei vertici conterrà vertici trasformati. Il flag D3DFVF_XYZRHW è incluso nel parametro FVF . Il metodo IDirect3DDevice9::CreateVertexBuffer ignora il flag D3DUSAGE_DONOTCLIP se si indica che il buffer conterrà vertici non tradotti (il flag D3DFVF_XYZ). I flag di ritaglio occupano memoria aggiuntiva, rendendo un buffer dei vertici con supporto per il ritaglio leggermente più grande di un buffer dei vertici incapace di contenere flag di ritaglio. Poiché queste risorse vengono allocate al momento della creazione del buffer dei vertici, è necessario richiedere in anticipo un buffer dei vertici con supporto per il ritaglio.

Il terzo parametro, FVF, è una combinazione di D3DFVF che descrivono il formato dei vertici del vertex buffer. Se si specifica 0 per questo parametro, il buffer dei vertici è un buffer dei vertici non FVF. Per altre informazioni, vedere Vertex Buffer FVF (Direct3D 9).For more information, see FVF Vertex Buffers (Direct3D 9). Il quarto parametro descrive la classe di memoria in cui posizionare il vertex buffer.

Il parametro finale accettato da IDirect3DDevice9::CreateVertexBuffer è l'indirizzo di una variabile che verrà riempita con un puntatore alla nuova interfaccia IDirect3DVertexBuffer9 dell'oggetto buffer dei vertici, se la chiamata ha esito positivo.

Non è possibile produrre flag di clip per un buffer dei vertici creato senza supportarli.

L'esempio di codice C++ seguente illustra l'aspetto della creazione di un buffer dei vertici nel codice.

   
// d3dDevice contains the address of an IDirect3DDevice9 interface
// g_pVB is a variable of type LPDIRECT3DVERTEXBUFFER9 

// The custom vertex type
struct CUSTOMVERTEX {
    FLOAT x, y, z;
    FLOAT rhw;
    DWORD color;
    FLOAT tu, tv;   // The texture coordinates
};

#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1)

// Create a clipping-capable vertex buffer. Allocate enough memory 
// in the default memory pool to hold three CUSTOMVERTEX 
// structures

    if( FAILED( d3dDevice->CreateVertexBuffer( 3*sizeof(CUSTOMVERTEX),
            0 /*Usage*/, D3DFVF_CUSTOMVERTEX, D3DPOOL_DEFAULT, &g_pVB, NULL ) ) )
        return E_FAIL;

Vertex Buffers