Пример #1
0
	void FbxParser::LoadScene(const std::string & filePath, GameObjectPtr rootNode)
	{
		mFbxManager = FbxManager::Create();
		auto ios = FbxIOSettings::Create(mFbxManager, IOSROOT);
		mFbxManager->SetIOSettings(ios);

		auto importer = FbxImporter::Create(mFbxManager, "");
		auto pos = filePath.find_last_of("/");
		mFbxFolder = (std::string::npos == pos) ? "" : filePath.substr(0, pos + 1);

		Utility::Printf("FbxFolder %s", mFbxFolder.c_str());

		if (importer->Initialize(filePath.c_str(), -1, mFbxManager->GetIOSettings()))
		{
			mFbxScene = FbxScene::Create(mFbxManager, "");
			bool result = importer->Import(mFbxScene);
			importer->Destroy();


			if (result)
			{
				auto& globalSetting = mFbxScene->GetGlobalSettings();

				FbxGeometryConverter geomConverter(mFbxManager);
				geomConverter.Triangulate(mFbxScene, true);

				auto fbxRootNode = mFbxScene->GetRootNode();

				if (fbxRootNode)
				{
					for (int i = 0; i < fbxRootNode->GetChildCount(); ++i)
					{
						LoadNode(rootNode, fbxRootNode->GetChild(i));
					}
					rootNode->FreshData(true);
				}
			}
		}
		else
		{
			auto status = importer->GetStatus();
			auto str = status.GetErrorString();
			Utility::Printf("FBX File Cant Load %s %s", filePath.c_str(), str);
		}
	}