0

頂点から頂点バッファーを作成する必要があります。MSDN のこのチュートリアルは素晴らしいです。

しかし、これは DirectX10+ に適しています。DirectX9を使用しています。ここで同じことを達成する方法は?

ありがとう。

4

1 に答える 1

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

これでうまくいくと思います。最初に CreateVertexBuffer() を使用して v_buffer を作成します。最初の値はそのサイズなので、頂点を追加する場合はその数値を変更することを忘れないでください。次に、ポインター キューブを使用してデータをバッファーに転送します。次のように、既存の配列からデータを転送する場合は、ロックとロック解除の間に 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 とその宣言を作成する必要があります。

于 2011-05-26T04:13:28.433 に答える