Aracılığıyla paylaş


Vertex Arabelleği Oluşturma (Direct3D 9)

Beş parametre kabul eden IDirect3DDevice9::CreateVertexBuffer yöntemini çağırarak bir köşe arabellek nesnesi oluşturursunuz. İlk parametre köşe arabelleği uzunluğunu bayt cinsinden belirtir. Köşe biçiminin bayt cinsinden boyutunu belirlemek için sizeof işlecini kullanın. Aşağıdaki özel köşe biçimini dikkate alın.

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)

Dört CUSTOMVERTEX yapısını tutacak bir köşe arabelleği oluşturmak için Length parametresi için [4*sizeof(CUSTOMVERTEX)] belirtmelisiniz.

İkinci parametre bir kullanım denetimleri kümesidir. Diğer şeylerin yanı üzere değeri, köşe arabelleğinin, görüntüleme alanının dışında bulunan köşeler için kırpma bilgileri (klip bayrakları biçiminde) içerip içeremeyeceğini belirler. Kesim bayrakları içeremeyen bir tepe noktası arabelleği oluşturmak için Kullanım parametresi için D3DUSAGE_DONOTCLIP bayrağını ekleyin. D3DUSAGE_DONOTCLIP bayrağı, yalnızca köşe arabelleğinin dönüştürülmüş köşeler içereceğini belirtmeniz durumunda uygulanır; bu, D3DFVF_XYZRHW bayrağının FVF parametresine eklenmesiyle sağlanır. IDirect3DDevice9::CreateVertexBuffer yöntemi, arabelleğin dönüştürülmemiş köşeler (D3DFVF_XYZ bayrağı) içereceğini belirtirseniz D3DUSAGE_DONOTCLIP bayrağını yoksayar. Kırpma bayrakları ek bellek kaplar ve kırpma özellikli bir köşe arabelleği, kırpma bayrakları içeremeyen bir köşe arabelleğinden biraz daha büyük olur. Köşe arabelleği oluşturulduğunda bu kaynaklar ayrıldığından, önceden kırpma özellikli bir köşe arabelleği istemeniz gerekir.

Üçüncü parametre, FVF, köşe arabelleğinin köşe biçimini açıklayan D3DFVF birleşimidir. Bu parametre için 0 belirtirseniz, köşe arabelleği FVF olmayan bir köşe arabelleğidir. Daha fazla bilgi için bkz. FVF Köşe Arabellekleri (Direct3D 9). Dördüncü parametre, köşe arabelleğinin yerleştirildiği bellek sınıfını açıklar.

Son parametre olan #IDirect3DDevice9::CreateVertexBuffer, çağrı başarılı olursa, köşe arabelleği nesnesinin yeni IDirect3DVertexBuffer9 arabirimine yönelik bir işaretçiyle doldurulacak olan değişkenin adresidir.

Kendisinde destek olmadan oluşturulmuş bir köşe arabelleği için küme bayrakları üretemezsiniz.

Aşağıdaki C++ kod örneği, kodda köşe arabelleği oluşturmanın nasıl görünebileceğini gösterir.

   
// 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;

Köşe Arabellekleri