Skip to main content
GameDev.net gamedev.net
🔒 Locked

[directx 9]Mesh

Started by giugio Nov 22, 2008 at 5:09 PM 1 replies 1.5k views
Original Post
giugio
giugio
Hy. I'm created an importer for collada file. The importer import all the meshes from collada file in a unique big mesh with a subset for any collada mesh. the problem is that with a very large file 10Mb i have a mesh with 100000 vertex and 31000 indexes and this catch an error: D3DX: D3DXCreateMesh: Too many faces/vertices for a 16bit mesh
bool CImporter::CreateMesh(int nVertexes, int nIndexes) { HRESULT hr = D3DXCreateMeshFVF(nIndexes,nVertexes,D3DXMESH_MANAGED,Vertex::FVF,m_Device,&m_mesh); if(FAILED(hr)) { ::MessageBox(0, "Collada CreateMesh() - FAILED", 0, 0); return false; } return true; }
may be Is a wrong method? Is better to create a mesh for mesh in collada file and use a vector for store all the meshes of the file? whath is the best container for meshes in directx? THanks.
esenthel
esenthel
check D3DXMESH_32BIT flag
and edit indexes as UINT32 instead of UINT16
giugio
giugio
Hy.
I have modify the importer for return single more simple divided meshes:
Quote:

vectorm_AllMeshes;
CImporter cin = CImporter(Device,IMPORTER_COLLADA);
cin.Init("c:\\ferrari.dae");
//cin.GetColladaMesh(Mesh,0);

for ( int k = 0 ;k cin.GetColladaMesh(Mesh,k);
m_AllMeshes.push_back(Mesh);
}


where
cin.GetColladaMesh(Mesh,k);
get the mesh in pos k from all the meshes of collada file.
and draw all:
Quote:

Device->BeginScene();

std::vector::iterator itMesh;
for(itMesh = m_AllMeshes.begin();itMesh != m_AllMeshes.end();itMesh++)
{
Device->SetMaterial(&mtrl);
ID3DXMesh* xmesh= *itMesh;
xmesh->DrawSubset(0);
}
//for(int i = 0; i < NumSubsets; i++)
//{
// Device->SetMaterial(&mtrl);
// //Device->SetTexture( 0, Textures );
// Mesh->DrawSubset(0);
//}

Device->EndScene();


but the result is no good , not all meshes are drawed!
only some.

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.