在做一个Ogre3d 模型和骨骼动画转换到FBX格式的工具。中间遇到种种问题,下面将主要思路记录下来。
转换Mesh比较简单,就是遍历MeshPtr,获取顶点和索引缓冲、获取UV坐标,然后按FBX SDK的格式重新定义,然后保存即可。这个比较好弄。贴出关键代码:
bool Util::enumMeshVertex(const Ogre::String& strMesh, const Ogre::String& strGroupName, VERTEX_LIST& vecPos, INDEX_LIST& vecIndex)
{
Ogre::MeshPtr pMesh = Ogre::MeshManager::getSingleton().load(strMesh, strGroupName);
int nVertexCount = 0;
int nIndexCount = 0;
DBGSTRING("NumSubMesh: %d", pMesh->getNumSubMeshes());
for(int i=0; i<pMesh->getNumSubMeshes(); i++) {
Ogre::SubMesh* pSubMesh = pMesh->getSubMesh(i);
if(pSubMesh->useSharedVertices) {
DBGSTRING("useSharedVertices");
nVertexCount += pMesh->sharedVertexData->vertexCount;
}else{
nVertexCount += pSubMesh->vertexData->vertexCount;
}
nIndexCount += pSubMesh->indexData->indexCount;
DBGSTRING("nIndexCount: %d", pSubMesh->indexData->indexCount);
}
DBGSTRING("nVertexCount: %d, nIndexCount: %d", nVertexCount, nIndexCount);
for(int i=0; i<pMesh->getNumSubMeshes(); ++i) {