VertexBuffer из вершин - PullRequest
       4

VertexBuffer из вершин

0 голосов
/ 26 ноября 2010

Мне нужно создать буфер вершин из вершин. Этот урок в MSDN великолепен.

Но этот урок подходит для DirectX10 +.Я использую DirectX9.Как сделать то же самое здесь?

Спасибо.

1 Ответ

0 голосов
/ 26 мая 2011
//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();

Я думаю, что это должно сработать. Сначала мы создаем v_buffer с помощью CreateVertexBuffer (), первое значение - его размер, поэтому не забудьте изменить это число, если вы добавляете больше вершин, а затем мы используем куб указателя для передачи данных в буфер. Вы также можете использовать memcpy () между блокировкой и разблокировкой, если вы хотите перенести данные из ранее существующего массива, например:

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();

Все это делается без цвета, если вы хотите добавить цвет в конструктор, а также если вы хотите отрендерить, вы должны создать D3DVERTEXELEMENT9 и объявление к нему.

...