119 lines
3.2 KiB
C++
119 lines
3.2 KiB
C++
/* -----------------------------------------------------------------------------
|
|
GSFramework
|
|
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
|
|
----------------------------------------------------------------------------- */
|
|
|
|
|
|
#ifndef __FBXIMPORT__
|
|
#define __FBXIMPORT__
|
|
|
|
|
|
#define FBXSDK_NEW_API
|
|
#include "fbxsdk.h"
|
|
|
|
#include "import/import_interface.h"
|
|
#include "automation/automated_property_provider.h"
|
|
#include "core/resource_factory_event_interface.h"
|
|
#include "container/nlist.h"
|
|
|
|
|
|
namespace GS {
|
|
|
|
namespace Core {
|
|
class Motion;
|
|
class Geometry;
|
|
struct Material;
|
|
}
|
|
namespace S3D {
|
|
class MItem;
|
|
struct MObject;
|
|
|
|
/// Exported node cache.
|
|
struct ExportedNode
|
|
{
|
|
FbxNode *node;
|
|
MItem *item;
|
|
|
|
ExportedNode(FbxNode *n, MItem *i) : node(n), item(i) {}
|
|
};
|
|
|
|
/*!
|
|
@short Autodesk FBX Importer.
|
|
@author Emmanuel Julien (ejulien@gsworks.fr)
|
|
*/
|
|
class FBXImporter : public IImport
|
|
{
|
|
int current_node_index;
|
|
|
|
String input_path;
|
|
Scene *scene;
|
|
const Config *config;
|
|
|
|
FbxManager *sdk_manager;
|
|
FbxScene *fbx_scene;
|
|
|
|
List <Core::Geometry *> geometry_list;
|
|
List <ExportedNode *> node_list;
|
|
|
|
/// Save material.
|
|
String SaveMaterial(const Core::Material &, const char *);
|
|
|
|
/// Get the item corresponding to a node, if it has been exported already.
|
|
bool GetNodeItem(FbxNode *, MItem **);
|
|
|
|
/// Export motion channels.
|
|
void ExportMotionChannel(FbxNode *, FbxAnimCurve *, Core::Motion *, Core::MotionChannel::Type);
|
|
/// Bake transformation.
|
|
void BakeTransformation(FbxNode *, MItem *, Core::Motion *);
|
|
/// Export motions.
|
|
void ExportMotions(FbxNode *, MItem *);
|
|
/// Export mesh layer.
|
|
void ExportMeshLayer(FbxMesh *, Core::Geometry *, int layer_index = 0);
|
|
/// Export skin.
|
|
bool ExportDeformers(FbxMesh *, FbxNode *, Core::Geometry &, MObject *);
|
|
/// Export vertex color.
|
|
void ExportMeshVertexColor(FbxMesh *, Core::Geometry *);
|
|
/// Export tangent frame.
|
|
void ExportMeshTangentFrame(FbxMesh *, Core::Geometry *);
|
|
/// Export a geometry (topology and normals).
|
|
String ExportGeometry(FbxMesh *, FbxNode *, MObject *);
|
|
|
|
/// Export a file-based texture.
|
|
String ExportFileTexture(FbxFileTexture *);
|
|
/// Export a layered texture.
|
|
String ExportLayeredTexture(FbxLayeredTexture *);
|
|
/// Export a material.
|
|
String ExportMaterial(FbxSurfaceMaterial *, FbxMesh *, bool use_skin);
|
|
|
|
/// Export a camera.
|
|
MItem *ExportCamera(FbxNodeAttribute *, FbxNode * = 0);
|
|
/// Export a mesh.
|
|
MObject *ExportObject(FbxNodeAttribute *, FbxNode * = 0);
|
|
/// Export a light.
|
|
MItem *ExportLight(FbxNodeAttribute *, FbxNode * = 0);
|
|
/// Dispatch the node to the correct exporter.
|
|
MItem *ExportNode(FbxNode *pNode);
|
|
|
|
/// Create and import an FBX file to a native FBX scene.
|
|
FbxScene *LoadNativeScene(const char *fbx_path);
|
|
|
|
public:
|
|
|
|
/// Return the geometries created during import.
|
|
const List <Core::Geometry *> &GeometryList() const { return geometry_list; }
|
|
|
|
/// Test importer on a file.
|
|
virtual bool TestImport(const char *uri);
|
|
/// Import scene from file.
|
|
virtual bool ImportScene(Scene *, const char *uri, const Config &, Group ** = 0);
|
|
|
|
FBXImporter();
|
|
~FBXImporter();
|
|
};
|
|
|
|
} // S3D
|
|
} // GS
|
|
|
|
|
|
#endif // __FBXIMPORT__
|