AssimpImporter class
Assimp importer.
Contents
Imports various formats using Assimp, in particular:
- Autodesk FBX (
*.fbx) - COLLADA (
*.dae) - glTF (
*.gltf,*.glb) - Blender 3D (
*.blend) - 3ds Max 3DS and ASE (
*.3ds,*.ase) - Wavefront OBJ (
*.obj) - Industry Foundation Classes (IFC/Step) (
*.ifc) - XGL (
*.xgl,*.zgl) - Stanford PLY (
*.ply) - AutoCAD DXF (
*.dxf) - LightWave, LightWave Scene (
*.lwo,*.lws) - Modo (
*.lxo) - Stereolithography (
*.stl) - DirectX X (
*.x) - AC3D (
*.ac) - Milkshape 3D (
*.ms3d) - TrueSpace (
*.cob,*.scn) - Biovision BVH (
*.bvh) - CharacterStudio Motion (
*.csm) - Ogre XML (
*.xml) - Irrlicht Mesh and Scene (
*.irrmesh,*.irr) - Quake I (
*.mdl) - Quake II (
*.md2) - Quake III Mesh (
*.md3) - Quake III Map/BSP (
*.pk3) - Return to Castle Wolfenstein (
*.mdc) - Doom 3 (
*.md5*) - Valve Model (
*.smd,*.vta) - Open Game Engine Exchange (
*.ogex) - Unreal (
*.3d) - BlitzBasic 3D (
*.b3d) - Quick3D (
*.q3d,*.q3s) - Neutral File Format (
*.nff) - Sense8 WorldToolKit (
*.nff) - Object File Format (
*.off) - PovRAY Raw (
*.raw) - Terragen Terrain (
*.ter) - 3D GameStudio (3DGS), 3D GameStudio (3DGS) Terrain (
*.mdl,*.hmp) - Izware Nendo (
*.ndo)
Supports importing of scene, object, camera, mesh, texture and image data.
This plugin depends on the Trade and Assimp libraries and is built if WITH_ASSIMPIMPORTER is enabled when building Magnum Plugins. To use as a dynamic plugin, you need to load the "AssimpImporter" plugin from MAGNUM_PLUGINS_IMPORTER_DIR. To use as a static plugin or as a dependency of another plugin with CMake, you need to request the AssimpImporter component of the MagnumPlugins package and link to the MagnumPlugins::AssimpImporter target.
This plugin provides 3dsImporter, Ac3dImporter, BlenderImporter, BvhImporter, CsmImporter, ColladaImporter, DirectXImporter, DxfImporter, FbxImporter, GltfImporter, IfcImporter, IrrlichtImporter, LightWaveImporter, ModoImporter, MilkshapeImporter, ObjImporter, OgreImporter, OpenGexImporter, StanfordImporter, StlImporter, TrueSpaceImporter, UnrealImporter, ValveImporter and XglImporter plugins.
See Downloading and building plugins, Plugin usage with CMake and Loading and using plugins for more information.
Behavior and limitations
Material import
- Only materials with shading mode
aiShadingMode_Phongare supported - Only the first diffuse/specular/ambient texture is loaded
Light import
- The following properties are ignored:
- Angle inner/outer cone
- Linear/quadratic/constant attenuation
- Ambient/specular color
- Assimp does not load a property which can be mapped to LightData::
intensity() - Light types other than
aiLightSource_DIRECTIONAL,aiLightSource_POINTandaiLightSource_SPOTare unsupported
Camera import
- Aspect and up vector properties are ignored
Mesh import
- Only the first mesh of a
aiNodeis loaded - Only triangle meshes are loaded
- Texture coordinate layers with other than two components are skipped
Texture import
- Textures with mapping mode/wrapping
aiTextureMapMode_Decalare loaded with SamplerWrapping::ClampToEdge - Assimp does not appear to load any filtering information
- Raw embedded image data is not supported
Bone import
- Not supported
Animation import
- Not supported
Plugin-specific configuration
Assimp has a versatile set of processing operations applied on imported scenes. The [postprocess] group of configuration() contains boolean toggles that correspond to the aiPostProcessSteps enum. Some of them are enabled by default, some not; options for not yet supported features are omitted. The full form of the configuration is shown below:
[configuration/postprocess] JoinIdenticalVertices=true Triangulate=true GenNormals=false GenSmoothNormals=false SplitLargeMeshes=false PreTransformVertices=false ValidateDataStructure=false ImproveCacheLocality=false RemoveRedundantMaterials=false FixInfacingNormals=false SortByPType=true FindDegenerates=false FindInvalidData=false GenUVCoords=false TransformUVCoords=false FindInstances=false OptimizeMeshes=false OptimizeGraph=false FlipUVs=false FlipWindingOrder=false
Access to internal importer state
The Assimp structures used to import data from a file can be accessed through importer state methods:
- Calling importerState() returns pointer to the imported
aiScene - Calling
*importerState()on data class instances returned from this importer return pointers to matching assimp structures:- AbstractMaterialData::
importerState() returns aiMaterial - CameraData::
importerState() returns aiCamera - TextureData::
importerState() returns std::pair<const aiMaterial*, aiTextureType>, in which the first texture of given type in given material is referred to. - MeshData3D::
importerState() returns aiMesh - ObjectData3D::
importerState() returns aiNode - LightData::
importerState() returns aiLight - ImageData2D::
importerState() may return aiTexture, if texture was embedded into the loaded file.
- AbstractMaterialData::
- openState() expects a pointer to an Assimp scene (i.e.,
const aiScene*) and optionally a path (in order to be able to load textures, if needed)
Base classes
- class AbstractImporter
- Base for importer plugins.
Constructors, destructors, conversion operators
- AssimpImporter() explicit
- Default constructor.
-
AssimpImporter(PluginManager::
Manager<AbstractImporter>& manager) explicit - Constructor.
-
AssimpImporter(PluginManager::
AbstractManager& manager, const std:: string& plugin) explicit - Plugin manager constructor.
Private functions
- auto doFeatures() const override -> Features virtual
- Implementation for features()
- auto doIsOpened() const override -> bool virtual
- Implementation for isOpened()
-
void doOpenData(Containers::
ArrayView<const char> data) override virtual - Implementation for openData()
-
void doOpenState(const void* state,
const std::
string& filePath) override virtual - Implementation for openState()
-
void doOpenFile(const std::
string& filename) override virtual - Implementation for openFile()
- void doClose() override virtual
- Implementation for close()
- auto doDefaultScene() override -> Int virtual
- Implementation for defaultScene()
- auto doSceneCount() const override -> UnsignedInt virtual
- Implementation for sceneCount()
-
auto doScene(UnsignedInt id) override -> Containers::
Optional<SceneData> virtual - Implementation for scene()
- auto doCameraCount() const override -> UnsignedInt virtual
- Implementation for cameraCount()
-
auto doCamera(UnsignedInt id) override -> Containers::
Optional<CameraData> virtual - Implementation for camera()
- auto doObject3DCount() const override -> UnsignedInt virtual
- Implementation for object3DCount()
-
auto doObject3DForName(const std::
string& name) override -> Int virtual - Implementation for object3DForName()
-
auto doObject3DName(UnsignedInt id) override -> std::
string virtual - Implementation for object3DName()
-
auto doObject3D(UnsignedInt id) override -> std::
unique_ptr<ObjectData3D> virtual - Implementation for object3D()
- auto doLightCount() const override -> UnsignedInt virtual
- Implementation for lightCount()
-
auto doLight(UnsignedInt id) override -> Containers::
Optional<LightData> virtual - Implementation for light()
- auto doMesh3DCount() const override -> UnsignedInt virtual
- Implementation for mesh3DCount()
-
auto doMesh3D(UnsignedInt id) override -> Containers::
Optional<MeshData3D> virtual - Implementation for mesh3D()
- auto doMaterialCount() const override -> UnsignedInt virtual
- Implementation for materialCount()
-
auto doMaterialForName(const std::
string& name) override -> Int virtual - Implementation for materialForName()
-
auto doMaterialName(UnsignedInt id) override -> std::
string virtual - Implementation for materialName()
-
auto doMaterial(UnsignedInt id) override -> std::
unique_ptr<AbstractMaterialData> virtual - Implementation for material()
- auto doTextureCount() const override -> UnsignedInt virtual
- Implementation for textureCount()
-
auto doTexture(UnsignedInt id) override -> Containers::
Optional<TextureData> virtual - Implementation for texture()
- auto doImage2DCount() const override -> UnsignedInt virtual
- Implementation for image2DCount()
-
auto doImage2D(UnsignedInt id) override -> Containers::
Optional<ImageData2D> virtual - Implementation for image2D()
- auto doImporterState() const override -> const void* virtual
- Implementation for importerState()
Function documentation
Magnum:: Trade:: AssimpImporter:: AssimpImporter() explicit
Default constructor.
In case you want to open images, use AssimpImporter(PluginManager::
Magnum:: Trade:: AssimpImporter:: AssimpImporter(PluginManager:: Manager<AbstractImporter>& manager) explicit
Constructor.
The plugin needs access to plugin manager for importing images.
void Magnum:: Trade:: AssimpImporter:: doOpenFile(const std:: string& filename) override virtual private
Implementation for openFile()
If Feature::
Int Magnum:: Trade:: AssimpImporter:: doDefaultScene() override virtual private
Implementation for defaultScene()
Default implementation returns -1.
UnsignedInt Magnum:: Trade:: AssimpImporter:: doSceneCount() const override virtual private
Implementation for sceneCount()
Default implementation returns 0.
UnsignedInt Magnum:: Trade:: AssimpImporter:: doCameraCount() const override virtual private
Implementation for cameraCount()
Default implementation returns 0.
UnsignedInt Magnum:: Trade:: AssimpImporter:: doObject3DCount() const override virtual private
Implementation for object3DCount()
Default implementation returns 0.
Int Magnum:: Trade:: AssimpImporter:: doObject3DForName(const std:: string& name) override virtual private
Implementation for object3DForName()
Default implementation returns -1.
std:: string Magnum:: Trade:: AssimpImporter:: doObject3DName(UnsignedInt id) override virtual private
Implementation for object3DName()
Default implementation returns empty string.
UnsignedInt Magnum:: Trade:: AssimpImporter:: doLightCount() const override virtual private
Implementation for lightCount()
Default implementation returns 0.
UnsignedInt Magnum:: Trade:: AssimpImporter:: doMesh3DCount() const override virtual private
Implementation for mesh3DCount()
Default implementation returns 0.
UnsignedInt Magnum:: Trade:: AssimpImporter:: doMaterialCount() const override virtual private
Implementation for materialCount()
Default implementation returns 0.
Int Magnum:: Trade:: AssimpImporter:: doMaterialForName(const std:: string& name) override virtual private
Implementation for materialForName()
Default implementation returns -1.
std:: string Magnum:: Trade:: AssimpImporter:: doMaterialName(UnsignedInt id) override virtual private
Implementation for materialName()
Default implementation returns empty string.
UnsignedInt Magnum:: Trade:: AssimpImporter:: doTextureCount() const override virtual private
Implementation for textureCount()
Default implementation returns 0.
UnsignedInt Magnum:: Trade:: AssimpImporter:: doImage2DCount() const override virtual private
Implementation for image2DCount()
Default implementation returns 0.