Vi posto la funzione che carica le mesh:
// [...]
struct XOBJECT {
LPD3DXMESH pMesh;
DWORD Num;
LPDIRECT3DTEXTURE9* ppTex;
D3DMATERIAL9* pMtrl;
};
// [...]
XOBJECT myMeshes[1];
// [...]
XOBJECT CreateMesh(const char* MeshPath, BOOL WithMaterials, BOOL WithTextures) {
XOBJECT myXObj = {NULL, 0, NULL, NULL};
LPD3DXMESH pMesh;
DWORD Num, i;
LPDIRECT3DTEXTURE9* ppTex;
D3DMATERIAL9* pMtrl;
LPD3DXBUFFER pMaterialBuffer;
D3DXMATERIAL* pMeshMaterials;
char MPath[999];
char *TmpPath;
if (FAILED(D3DXLoadMeshFromXA(MeshPath,
D3DXMESH_SYSTEMMEM,
pD3DD,
NULL,
&pMaterialBuffer,
NULL,
&Num,
&pMesh))) {
GetModuleFileNameA(GetModuleHandle(NULL), MPath, 999);
TmpPath = strrchr(MshPath, '\\');
MPath[(strlen(MshPath) - strlen(TmpPath)) + 1] = '\0';
strcat(MPath, MeshPath);
if (FAILED(D3DXLoadMeshFromXA(MPath,
D3DXMESH_SYSTEMMEM,
pD3DD,
NULL,
&pMaterialBuffer,
NULL,
&Num,
&pMesh))) {
MessageBox(0, "Impossibile aprire la Mesh.", "ERRORE", MB_ICONEXCLAMATION | MB_OK);
return myXObj;
}
}
pMeshMaterials = (D3DXMATERIAL*)pMaterialBuffer -> GetBufferPointer();
pMtrl = new D3DMATERIAL9[Num];
ppTex = new LPDIRECT3DTEXTURE9[Num];
for (i = 0; i < Num; i++) {
if (WithMaterials) {
pMtrl[i] = pMeshMaterials[i].MatD3D;
pMtrl[i].Ambient = pMtrl[i].Diffuse;
}
if (WithTextures) {
if(FAILED(D3DXCreateTextureFromFileA(pD3DD,
pMeshMaterials[i].pTextureFilename,
&ppTex[i])))
ppTex[i] = NULL;
}
}
pMaterialBuffer -> Release();
myXObj = {pMesh, Num, ppTex, pMtrl};
return myXObj;
}
Richiamo la funzione in questo modo:
myMeshes[0] = CreateMesh("Tube.x", TRUE, FALSE); // Con materiali senza texture
La riga in questione va in crash sempre e gli errori che mi da il debugger non mi aiutano molto:
Nr: 0 Address: 00000000 Function: InitD3D(hWnd=0x1a03f0, width=640, height=480, fullscreenflag=0) File: C:\WINDOWS\sy... Line: 315
Nr: 1 Address: 0040208A Function: CreateD3DWindow(title=0x40717b "Le mesh in Direct3D", b_width=640, b_height=480, fullscreenflag=0) File: C:\WINDOWS\sy... Line: 385
Nr: 2 Address: 004024B5 Function: WinMain@16(hInstance=0x400000, hPrevInstance=0x0, lpCmdLine=0x241f25 "", nCmdShow=10) File: C:\WINDOWS\sy... Line: 484
Nr: 3 Address: 00000000 Function: 0x00404ad6 in main()
* InitD3D() è la funzione che contiene il richiamo della funzione CreateMesh()
* CreateD3DWindow() è la funzione che crea la finestra e richiama la funzione InitD3D()
* WinMain@16() è la funzione principale che richiama la funzione CreateD3DWindow()
Come posso risolvere? Grazie a tutti coloro che risponderanno