FbxSceneLoader.cpp 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #include "stdafx.h"
  2. #include "FbxSceneLoader.h"
  3. #include "FbxLoadException.h"
  4. #include <vector>
  5. void MapNodes(std::map<std::uint64_t, BabylonNode*> map, BabylonNode* node){
  6. map[node->uniqueId()] = node;
  7. for (auto& child : node->children()){
  8. MapNodes(map, &child);
  9. }
  10. }
  11. FbxSceneLoader::FbxSceneLoader(const std::string& filePath) :_scene(nullptr), _filePath(filePath), _fbxMgr(FbxManager::Create())
  12. {
  13. std::unique_ptr<FbxIOSettings, FbxDeleter> iosettings(FbxIOSettings::Create(_fbxMgr.get(), IOSROOT));
  14. iosettings->SetBoolProp(IMP_FBX_MATERIAL, true);
  15. iosettings->SetBoolProp(IMP_FBX_TEXTURE, true);
  16. iosettings->SetBoolProp(IMP_FBX_LINK, true);
  17. iosettings->SetBoolProp(IMP_FBX_SHAPE, true);
  18. iosettings->SetBoolProp(IMP_FBX_GOBO, true);
  19. iosettings->SetBoolProp(IMP_FBX_ANIMATION, true);
  20. iosettings->SetBoolProp(IMP_SKINS, true);
  21. iosettings->SetBoolProp(IMP_DEFORMATION, true);
  22. iosettings->SetBoolProp(IMP_FBX_GLOBAL_SETTINGS, true);
  23. iosettings->SetBoolProp(IMP_TAKE, true);
  24. _fbxMgr->SetIOSettings(iosettings.get());
  25. std::unique_ptr<FbxImporter, FbxDeleter> importer(FbxImporter::Create(_fbxMgr.get(), "SceneImporter"));
  26. if (!importer->Initialize(_filePath.c_str())){
  27. throw FbxLoadException(importer->GetStatus().GetErrorString());
  28. }
  29. _scene = FbxScene::Create(_fbxMgr.get(), filePath.c_str());
  30. importer->Import(_scene);
  31. _rootNode = std::make_unique<BabylonNode>(_scene->GetRootNode());
  32. MapNodes(_nodesMap, _rootNode.get());
  33. }
  34. FbxSceneLoader::~FbxSceneLoader()
  35. {
  36. _scene->Destroy(true);
  37. }
  38. babylon_global_settings FbxSceneLoader::getGlobalSettings(){
  39. babylon_global_settings result;
  40. auto& settings = _scene->GetGlobalSettings();
  41. return result;
  42. }