|
|
导出球和一些简单的模型没问题,但导出像茶壶那样比较复杂的就不行了,看起来支离破碎的。代码如下:
if (m_pGame)
{
m_pGame->ReleaseIGame();
m_pGame=NULL;
}
m_pGame=GetIGameInterface();
IGameConversionManager *cm=GetConversionManager();
cm->SetCoordSystem(IGameConversionManager::IGAME_D3D);
m_pGame->InitialiseIGame(true);
int nodeCount=m_pGame->GetTopLevelNodeCount();
m_nNodes=nodeCount;
int materialCount=m_pGame->GetRootMaterialCount();
if (nodeCount==0)
{
MessageBox(GetActiveWindow(),"No nodes available to export","Realm Engine Exporter",MB_OK|MB_ICONERROR);
m_pGame->ReleaseIGame();
return;
}
for (int nodeIndex=0;nodeIndex<nodeCount;nodeIndex++)
{
IGameNode *node=m_pGame->GetTopLevelNode(nodeIndex);
IGameObject *obj=node->GetIGameObject();
if (obj->GetIGameType()!=IGameMesh::IGAME_MESH)
{
break;
}
obj->InitializeData();
IGameMesh *mesh=(IGameMesh*)obj;
int vertCount=mesh->GetNumberOfVerts();
m_vertices=(ModelVertex*)realloc(m_vertices,sizeof(ModelVertex)*(m_header.nNumVertices+vertCount));
int faceCount=mesh->GetNumberOfFaces();
m_faces=(ModelFace*)realloc(m_faces,sizeof(ModelFace)*(m_header.nNumFaces+faceCount));
bool flags[65535]={false};
for (int i=0;i<faceCount;i++)
{
FaceEx *face=mesh->GetFace(i);
m_faces[m_header.nNumFaces+i].nMaterialID=(face->matID-1);
for (int j=0;j<3;j++)
{
int k=m_header.nNumVertices+face->vert[j];
m_faces[m_header.nNumFaces+i].nIndices[j]=k;
if (flags[face->vert[j]])
{
break;
}
Point3 p=mesh->GetVertex(face->vert[j]);
m_vertices[k].fPos[0]=p.x;
m_vertices[k].fPos[1]=p.y;
m_vertices[k].fPos[2]=p.z;
p=mesh->GetNormal(i,j);
m_vertices[k].vNormal.x=p.x;
m_vertices[k].vNormal.y=p.y;
m_vertices[k].vNormal.z=p.z;
p=mesh->GetMapVertex(1,face->vert[j]);
m_vertices[k].fTexture[0]=p.x;
m_vertices[k].fTexture[1]=p.y;
flags[face->vert[j]]=true;
}
}
m_header.nNumVertices+=vertCount;
m_header.nNumFaces+=faceCount;
} |
|