FbxSceneLoader.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #pragma once
  2. #include "FbxDeleter.h"
  3. #include <fbxsdk.h>
  4. #include <string>
  5. #include <vector>
  6. #include <memory>
  7. #include "BabylonNode.h"
  8. #include "BabylonVertex.h"
  9. #include <map>
  10. class FbxSceneLoader
  11. {
  12. private:
  13. std::string _filePath;
  14. std::unique_ptr<FbxManager, FbxManagerDeleter> _fbxMgr;
  15. FbxScene* _scene;
  16. std::unique_ptr<BabylonNode> _rootNode;
  17. std::map<std::uint64_t, BabylonNode*> _nodesMap;
  18. public:
  19. FbxSceneLoader(const std::string& filePath);
  20. ~FbxSceneLoader();
  21. FbxScene* getScene(){
  22. return _scene;
  23. }
  24. BabylonNode* rootNode() const{
  25. return _rootNode.get();
  26. }
  27. std::map<std::uint64_t, BabylonNode*>& getNodeMap(){
  28. return _nodesMap;
  29. }
  30. FbxScene* getScene() const{
  31. return _scene;
  32. }
  33. FbxCamera* GetDefaultCamera() const{
  34. const int nodeCount = _scene->GetSrcObjectCount<FbxNode>();
  35. for (int index = 0; index < nodeCount; index++)
  36. {
  37. auto node = _scene->GetSrcObject<FbxNode>(index);
  38. auto camera = node->GetCamera();
  39. if (!camera){
  40. // not a geometry node, go to next
  41. continue;
  42. }
  43. return camera;
  44. // ignore skinned meshes
  45. /*if (mesh->GetDeformerCount(FbxDeformer::eSkin) == 0){
  46. this->_meshes.push_back(mesh);
  47. }*/
  48. }
  49. return nullptr;
  50. }
  51. babylon_global_settings getGlobalSettings();
  52. };