1

DirectX 9の.xファイルからロードされたメッシュを取得し、それを別のFVF形式に複製して、必要な頂点を取得しようとしています。

LPD3DXMESH pMesh;
DWORD numMaterials;
LPD3DXBUFFER pMaterialBuffer;
HRESULT hr = D3DXLoadMeshFromX( file, D3DXMESH_SYSTEMMEM, pDevice, NULL, &pMaterialBuffer, NULL, &numMaterials, &pMesh ); // Loads just fine, I can even render it

LPD3DXMESH clone;
pMesh ->CloneMeshFVF(D3DXMESH_SYSTEMMEM, D3DFVF_XYZ, pDevice, &clone); // Trying to get only the xyz data out

クローン段階で、D3DERR_INVALIDCALLエラーが発生します。しかし、私の主張には何の問題もありません。

これから達成しようとしているのは、ロードしている.xファイルのタイプに依存せずに、最終的にすべての頂点データをバッファーから取得することです。

typedef struct VERTEX_TYPE 
{
    float position[3];
} VERTEX;

void* pTemp;
VERTEX* pVertexData;

DWORD nNumVerts = mesh->GetNumVertices();
DWORD nSizeVerts = mesh->GetNumBytesPerVertex();
DWORD nNumFaces = mesh->GetNumFaces();


pVertexData = new VERTEX[nNumFaces * 3];
mesh->LockVertexBuffer(D3DLOCK_READONLY, &pTemp);
memcpy(pVertexData, pTemp, sizeof(VERTEX)*nNumVerts);
mesh->UnlockVertexBuffer();

私がどこで間違っているのかについて何か助けはありますか?

4

1 に答える 1

0

私はそれを考え出した。問題は、directX9EXデバイスを作成していたことでした。EXデバイスと比較して通常のデバイスが必要な理由はわかりませんが、エラーが修正され、すべて正常に動作します。

于 2012-09-28T16:42:00.147 に答える