0

今日、私は DirectX(D3D9) を使い始めました。静的メッシュ クラスを作成するまではすべてうまくいきました。このクラスには、バッファの生成、描画、およびバッファの解放のためのメソッドが含まれています。

問題はバッファ生成機能にあります。関数への引数として頂点配列を渡したい場合、描画時に三角形 (三角形でテスト) は描画されませんが、頂点が関数内で宣言されている場合 (引数)、三角形は描画されません。

頂点クラス:

#define CUSTOMFVF (D3DFVF_XYZRHW | D3DFVF_DIFFUSE)
class CUSTOMVERTEX
{
public:
    float X, Y, Z, RHW;
    DWORD Color;
};

頂点バッファ生成関数 (動作しません):

void StaticMesh::CreateBuffer(CUSTOMVERTEX Vertices[], LPDIRECT3DDEVICE9 d3ddev)
{
    // USING FIXED SIZE WHILE TESTING WITH A SINGLE TRIANGLE.
    d3ddev->CreateVertexBuffer(3*sizeof(CUSTOMVERTEX), 0, CUSTOMFVF, D3DPOOL_MANAGED, &Buffer, NULL);

    VOID* p;

    Buffer->Lock(0, 0, (void**)&p, 0);
    memcpy(p, Vertices, sizeof(Vertices));
    Buffer->Unlock();
}

頂点バッファ生成関数 (機能します):

void StaticMesh::CreateBuffer(LPDIRECT3DDEVICE9 d3ddev)
{
    CUSTOMVERTEX vertices[3] = 
    {
        { 400.0f, 62.5f, 0.5f, 1.0f, D3DCOLOR_XRGB(0, 0, 255), },
        { 650.0f, 500.0f, 0.5f, 1.0f, D3DCOLOR_XRGB(0, 255, 0), },
        { 150.0f, 500.0f, 0.5f, 1.0f, D3DCOLOR_XRGB(255, 0, 0), },
    };

    // USING FIXED SIZE WHILE TESTING WITH A SINGLE TRIANGLE.
    d3ddev->CreateVertexBuffer(3*sizeof(CUSTOMVERTEX), 0, CUSTOMFVF, D3DPOOL_MANAGED, &Buffer, NULL);

    VOID* p;

    Buffer->Lock(0, 0, (void**)&p, 0);
    memcpy(p, Vertices, sizeof(Vertices));
    Buffer->Unlock();
}

何が問題なのかわかりません。助けてくれてありがとう。さらに情報が必要な場合は、私に知らせてください。

4

1 に答える 1

1

関数のパラメータ Vertices

void StaticMesh::CreateBuffer(CUSTOMVERTEX Vertices[], LPDIRECT3DDEVICE9 d3ddev)

型ポインタです。そのため、関数内の sizeof(Vertices) は、期待どおりの配列全体のサイズではなく、ポインターのサイズのみを返します。

頂点の数を別のパラメーターとして関数に渡し、関数を次のように変更してください。

void StaticMesh::CreateBuffer(CUSTOMVERTEX Vertices[], int aNumVertices, LPDIRECT3DDEVICE9 d3ddev)
{
    // USING FIXED SIZE WHILE TESTING WITH A SINGLE TRIANGLE.
    d3ddev->CreateVertexBuffer(aNumVertices*sizeof(CUSTOMVERTEX), 0, CUSTOMFVF, D3DPOOL_MANAGED, &Buffer, NULL);

    VOID* p;

    Buffer->Lock(0, 0, (void**)&p, 0);
    memcpy(p, Vertices, aNumVertices * sizeof(CUSTOMVERTEX));
    Buffer->Unlock();
}
于 2012-06-16T17:56:49.657 に答える