Мне потребовалось объединить два меша в один и я сделал первое, что пришло в голову:
void operator+=(C_BaseMesh &mesh)
{
if (!pMesh || !mesh.pMesh) return;
LPD3DXMESH pTempMesh = NULL;
LPD3DXMESH array[]={mesh.pMesh, pMesh};
LPDIRECT3DDEVICE9 pDevice=NULL;
if (pMesh->GetDevice(&pDevice) != D3D_OK)
{
AfxMessageBox("pMesh->GetDevice(&pDevice) != D3D_OK");
return;
}
D3DVERTEXELEMENT9 decl[MAX_FVF_DECL_SIZE];
D3DXDeclaratorFromFVF(pMesh->GetFVF(), decl);
if (D3DXConcatenateMeshes(array, 2, D3DXMESH_MANAGED, NULL, NULL, decl, pDevice, &pTempMesh) != D3D_OK)
{
AfxMessageBox("D3DXConcatenateMeshes(...) != D3D_OK");
return;
}
pMesh->Release();
pMesh = pTempMesh;
}
В результате получается, что новый меш является просто копией меша, который указан первым в массиве array. Что я делаю не так?