2010-11-26 28 views
0

Je dois créer un vertex buffer à partir de sommets. This tutorial dans MSDN est splendide.VertexBuffer from Vertices

Mais celui-ci est bon pour DirectX10 +. J'utilise DirectX9. Comment accomplir la même chose ici?

Merci.

Répondre

0
//Definitions 
LPDIRECT3DVERTEXBUFFER9 v_buffer = NULL; 
struct SimpleVertexCombined{ 
    D3DXVECTOR3 Pos; 
    SimpleVertexCombined(FLOAT X, FLOAT Y, FLOAT Z):Pos(X, Y, Z){} 
}; 
d3ddev->CreateVertexBuffer(8*sizeof(SimpleVertexCombined), 
          0, 
          0, 
          D3DPOOL_MANAGED, 
          &v_buffer, 
          NULL); 
SimpleVertexCombined* cube = 0; 
v_buffer->Lock(0, 0, (void**)&cube, 0); 
    cube[0] = SimpleVertexCombined(-1.0f, -1.0f, -1.0f); 
    cube[1] = SimpleVertexCombined(-1.0f, 1.0f, -1.0f); 
    cube[2] = SimpleVertexCombined(1.0f, 1.0f, -1.0f); 
    cube[3] = SimpleVertexCombined(1.0f, -1.0f, -1.0f); 
    cube[4] = SimpleVertexCombined(-1.0f, -1.0f, 1.0f); 
    cube[5] = SimpleVertexCombined(-1.0f, 1.0f, 1.0f); 
    cube[6] = SimpleVertexCombined(1.0f, 1.0f, 1.0f); 
    cube[7] = SimpleVertexCombined(1.0f, -1.0f, 1.0f); 
v_buffer->Unlock(); 

Je pense que cela devrait fonctionner, d'abord, nous créons le v_buffer en utilisant CreateVertexBuffer(), la première valeur est sa taille alors souvenez-vous de changer ce numéro si vous ajoutez plus de sommets, puis on utilise le cube pointeur pour transférer des données dans le tampon. Vous pouvez également utiliser memcpy() entre le verrouillage et de déverrouillage si vous souhaitez transférer des données d'un tableau préexistant, comme celui-ci:

SimpleVertexCombined verticesCombo[] = { 
    D3DXVECTOR3(0.0f, 0.5f, 0.5f), 
    D3DXVECTOR3(0.0f, 0.0f, 0.5f), 
    D3DXVECTOR3(0.5f, -0.5f, 0.5f), 
    D3DXVECTOR3(0.5f, 0.0f, 0.0f), 
    D3DXVECTOR3(-0.5f, -0.5f, 0.5f), 
    D3DXVECTOR3(0.0f, 0.5f, 0.0f), 
}; 
VOID* pVoid; 
v_buffer->Lock(0, 0, (void**)&cube, 0); 
    memcpy(pVoid, verticesCombo, sizeof(verticesCombo)); 
v_buffer->Unlock(); 

Tout cela se fait sans couleur, si vous voulez la couleur que vous devez Ajoutez-le au constructeur, aussi si vous voulez que vous deviez créer un D3DVERTEXELEMENT9 et une déclaration.