// ------------------------------------------------------------------------------------------------ void ColladaModelFactory::ProcessXml(xml_node * rootXml, Model3dBuilder * builder) { // process images xml_node* images = FindChildByName(rootXml, "library_images"); for(xml_node* node = FindChildByName(images, "image"); node != NULL; node=FindNextByName(node, "image")) { ProcessImage(builder, node); } // process materials xml_node* mats = FindChildByName(rootXml, "library_materials"); for(xml_node* node = FindChildByName(mats, "material"); node != NULL; node=FindNextByName(node, "material")) { ProcessMaterial(builder, node); } // process effects xml_node* effects = FindChildByName(rootXml, "library_effects"); for(xml_node* node = FindChildByName(effects, "effect"); node != NULL; node=FindNextByName(node, "effect")) { ProcessEffect(builder, node); } // process geometries xml_node* geos = FindChildByName(rootXml, "library_geometries"); for(xml_node* node = FindChildByName(geos, "geometry"); node != NULL; node=FindNextByName(node, "geometry")) { ProcessGeo(builder, node); } // process controllers ControllerToGeo controllerToGeo; xml_node* controllers = FindChildByName(rootXml, "library_controllers"); for(xml_node* node = FindChildByName(controllers, "controller"); node != NULL; node=FindNextByName(node, "controller")) { ProcessController(node, &controllerToGeo); } // process visual scene xml_node* scenes = FindChildByName(rootXml, "library_visual_scenes"); xml_node* scene = FindChildByName(scenes, "visual_scene"); // just grab the 1st visual scene if(scene) { const char * nodeName = GetAttributeText(scene, "id", true); if (!nodeName) { nodeName = "!missing-id!"; } Node * rootNode = builder->m_model->CreateNode(nodeName); builder->m_model->SetRoot(rootNode); ProcessChildNodes(builder, scene, rootNode, &controllerToGeo); } }
void FbxLoader::LoadFromFile(const std::string& folder, const std::string& name, AxisMode axismode, float scaleFactor) { FbxManager* fbxManager = FbxManager::Create(); FbxIOSettings* ios = FbxIOSettings::Create(fbxManager, IOSROOT); fbxManager->SetIOSettings(ios); std::string path = folder + "\\" + name; relativeFolder = folder; FbxImporter* importer = (FbxImporter::Create(fbxManager, "")); bool b = importer->Initialize(path.c_str(), -1, fbxManager->GetIOSettings()); if(!b) { } scene = FbxScene::Create(fbxManager, path.c_str()); importer->Import(scene); int fileMajor, fileMinor, fileRevision; importer->GetFileVersion(fileMajor, fileMinor, fileRevision); importer->Destroy(); factor = scaleFactor; this->axismode = axismode; FbxNode* root = scene->GetRootNode(); FbxGeometryConverter geometryConverter(fbxManager); FbxAxisSystem axis = FbxAxisSystem::MayaYUp; axis.ConvertScene(scene); geometryConverter.Triangulate(scene, false); ProcessMaterial(scene); LoadAnimationClipData(); ProcessMeshNode(root, rootNode); }