00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef NVBLASTEXTEXPORTERFBXWRITER_H
00030 #define NVBLASTEXTEXPORTERFBXWRITER_H
00031
00032 #include "NvBlastExtExporter.h"
00033 #include <memory>
00034 #include <vector>
00035 #include <map>
00036
00037 namespace fbxsdk
00038 {
00039 class FbxScene;
00040 class FbxNode;
00041 class FbxMesh;
00042 class FbxSkin;
00043 class FbxManager;
00044 class FbxSurfaceMaterial;
00045 class FbxDisplayLayer;
00046 }
00047
00048 struct NvBlastAsset;
00049
00050 namespace Nv
00051 {
00052 namespace Blast
00053 {
00054 class Mesh;
00055 struct Triangle;
00056 struct CollisionHull;
00057
00058 class FbxFileWriter : public IMeshFileWriter
00059 {
00060 public:
00061
00065 FbxFileWriter();
00066
00067
00068 virtual void release() override;
00069
00073 fbxsdk::FbxScene* getScene();
00074
00078 virtual bool appendMesh(const AuthoringResult& aResult, const char* assetName, bool nonSkinned) override;
00079
00084 virtual bool appendMesh(const ExporterMeshData& meshData, const char* assetName, bool nonSkinned) override;
00085
00089 virtual bool saveToFile(const char* assetName, const char* outputPath) override;
00090
00094 virtual void setInteriorIndex(int32_t index) override;
00095
00099 bool bOutputFBXAscii;
00100
00101 private:
00102 std::vector<fbxsdk::FbxSurfaceMaterial*> mMaterials;
00103 fbxsdk::FbxScene* mScene;
00104 fbxsdk::FbxDisplayLayer* mRenderLayer;
00105
00106
00107 std::shared_ptr<fbxsdk::FbxManager> sdkManager;
00108 std::map<uint32_t, fbxsdk::FbxNode*> chunkNodes;
00109 std::map<uint32_t, NvcVec3> worldChunkPivots;
00110
00111 bool appendNonSkinnedMesh(const AuthoringResult& aResult, const char* assetName);
00112 bool appendNonSkinnedMesh(const ExporterMeshData& meshData, const char* assetName);
00113 void createMaterials(const ExporterMeshData& meshData);
00114 void createMaterials(const AuthoringResult& aResult);
00115
00120 bool appendCollisionMesh(uint32_t meshCount, uint32_t* offsets, CollisionHull** hulls, const char* assetName);
00121
00122 uint32_t addCollisionHulls(uint32_t chunkIndex, fbxsdk::FbxDisplayLayer* displayLayer, fbxsdk::FbxNode* parentNode, uint32_t hullsCount, CollisionHull** hulls);
00123 uint32_t createChunkRecursive(uint32_t currentCpIdx, uint32_t chunkIndex, fbxsdk::FbxNode *meshNode, fbxsdk::FbxNode* parentNode, fbxsdk::FbxSkin* skin, const AuthoringResult& aResult);
00124 uint32_t createChunkRecursive(uint32_t currentCpIdx, uint32_t chunkIndex, fbxsdk::FbxNode *meshNode, fbxsdk::FbxNode* parentNode, fbxsdk::FbxSkin* skin, const ExporterMeshData& meshData);
00125
00126 void createChunkRecursiveNonSkinned(const std::string& meshName, uint32_t chunkIndex, fbxsdk::FbxNode* parentNode,
00127 const std::vector<fbxsdk::FbxSurfaceMaterial*>& materials, const AuthoringResult& aResult);
00128
00129 void createChunkRecursiveNonSkinned(const std::string& meshName, uint32_t chunkIndex, fbxsdk::FbxNode* parentNode,
00130 const std::vector<fbxsdk::FbxSurfaceMaterial*>& materials, const ExporterMeshData& meshData);
00131
00132 void addControlPoints(fbxsdk::FbxMesh* mesh, const ExporterMeshData& meshData);
00133 void addBindPose();
00134
00135 void generateSmoothingGroups(fbxsdk::FbxMesh* mesh, FbxSkin* skin);
00136 void removeDuplicateControlPoints(fbxsdk::FbxMesh* mesh, FbxSkin* skin);
00137
00138 int32_t mInteriorIndex;
00139 };
00140
00141 }
00142 }
00143
00144 #endif // NVBLASTEXTEXPORTERFBXWRITER_H