class mrpt::viz::CAssimpModel
Overview
This class can load & render 3D models in a number of different formats (requires the library assimp).
Supported formats (via Assimp library): http://assimp.sourceforge.net/main_features_formats.html
Most common ones: AutoCAD DXF (.dxf), Collada (.dae), Blender 3D (.blend), 3ds Max 3DS (.3ds), 3ds Max ASE (.ase), Quake I (.mdl), Quake II (.md2), Quake III Mesh (.md3), Wavefront OBJ (.obj), Stanford PLY (.ply), glTF (.gltf, .glb), FBX (.fbx), etc.
Models are loaded via CAssimpModel::loadScene()
Architecture (MRPT 3.0) :
This class is part of mrpt::viz (no OpenGL dependencies)
It loads 3D models using Assimp and converts them to mrpt::viz primitives
Textured meshes become CSetOfTexturedTriangles children
Non-textured meshes become triangle data (VisualObjectParams_Triangles)
Point clouds become point data (VisualObjectParams_Points)
Wireframe elements become line data (VisualObjectParams_Lines)
The class is a CSetOfObjects container that holds:
One CSetOfTexturedTriangles per texture used in the model
One CSetOfTriangles for all non-textured triangles
Additional child objects for points and lines if present
See also:
mrpt::viz::Scene, CSetOfObjects, CSetOfTexturedTriangles
#include <mrpt/viz/CAssimpModel.h> class CAssimpModel: public mrpt::viz::CSetOfObjects { public: // typedefs typedef std::shared_ptr<mrpt::viz ::CAssimpModel> Ptr; typedef std::shared_ptr<const mrpt::viz ::CAssimpModel> ConstPtr; typedef std::unique_ptr<mrpt::viz ::CAssimpModel> UniquePtr; typedef std::unique_ptr<const mrpt::viz ::CAssimpModel> ConstUniquePtr; // structs struct AssimpSceneWrapper; struct LoadFlags; struct LoadedTexture; struct TextureInfo; // fields static constexpr const char* className = "mrpt::viz" "::" "CAssimpModel"; // construction CAssimpModel(); CAssimpModel(CAssimpModel&&); // methods static constexpr auto getClassName(); static const mrpt::rtti::TRuntimeClassId& GetRuntimeClassIdStatic(); static std::shared_ptr<CObject> CreateObject(); template <typename... Args> static Ptr Create(Args&&... args); template <typename Alloc, typename... Args> static Ptr CreateAlloc( const Alloc& alloc, Args&&... args ); template <typename... Args> static UniquePtr CreateUnique(Args&&... args); virtual const mrpt::rtti::TRuntimeClassId* GetRuntimeClass() const; virtual mrpt::rtti::CObject* clone() const; void loadScene(const std::string& file_name, int flags = LoadFlags::RealTimeMaxQuality|LoadFlags::FlipUVs|LoadFlags::Verbose); CAssimpModel& operator = (CAssimpModel&&); }; // direct descendants class CAnimatedAssimpModel;
Inherited Members
public: // typedefs typedef std::shared_ptr<CObject> Ptr; typedef std::shared_ptr<const CObject> ConstPtr; typedef std::shared_ptr<CSerializable> Ptr; typedef std::shared_ptr<const CSerializable> ConstPtr; typedef std::shared_ptr<mrpt::viz ::CSetOfObjects> Ptr; typedef std::shared_ptr<const mrpt::viz ::CSetOfObjects> ConstPtr; typedef std::unique_ptr<mrpt::viz ::CSetOfObjects> UniquePtr; typedef std::unique_ptr<const mrpt::viz ::CSetOfObjects> ConstUniquePtr; typedef ListVisualObjects::const_iterator const_iterator; typedef ListVisualObjects::iterator iterator; // structs struct PoseAndScale; struct State; // fields static constexpr const char* className = "mrpt::viz" "::" "CSetOfObjects"; // methods static const mrpt::rtti::TRuntimeClassId& GetRuntimeClassIdStatic(); virtual const mrpt::rtti::TRuntimeClassId* GetRuntimeClass() const; virtual const mrpt::rtti::TRuntimeClassId* GetRuntimeClass() const; static const mrpt::rtti::TRuntimeClassId& GetRuntimeClassIdStatic(); virtual const mrpt::rtti::TRuntimeClassId* GetRuntimeClass() const; static constexpr auto getClassName(); static const mrpt::rtti::TRuntimeClassId& GetRuntimeClassIdStatic(); static std::shared_ptr<CObject> CreateObject(); template <typename... Args> static Ptr Create(Args&&... args); template <typename Alloc, typename... Args> static Ptr CreateAlloc( const Alloc& alloc, Args&&... args ); template <typename... Args> static UniquePtr CreateUnique(Args&&... args); virtual const mrpt::rtti::TRuntimeClassId* GetRuntimeClass() const; virtual mrpt::rtti::CObject* clone() const; const_iterator begin() const; const_iterator end() const; iterator begin(); iterator end(); void clear(); template <typename T> T::Ptr getByClass(size_t ith = 0); virtual bool traceRay(const mrpt::poses::CPose3D& o, double& dist) const; virtual CVisualObject& setColor_u8(const mrpt::img::TColor& c); bool contains(const CVisualObject::Ptr& obj) const; virtual mrpt::math::TBoundingBoxf internalBoundingBoxLocal() const;
Typedefs
typedef std::shared_ptr<mrpt::viz ::CAssimpModel> Ptr
A type for the associated smart pointer.
Methods
virtual const mrpt::rtti::TRuntimeClassId* GetRuntimeClass() const
Returns information about the class of an object in runtime.
virtual mrpt::rtti::CObject* clone() const
Returns a deep copy (clone) of the object, indepently of its class.
void loadScene(const std::string& file_name, int flags = LoadFlags::RealTimeMaxQuality|LoadFlags::FlipUVs|LoadFlags::Verbose)
Loads a 3D scene from a file in any Assimp-supported format.
This clears any previously loaded content and populates this object with the loaded model’s geometry, materials, and textures.
Example:
CAssimpModel model; model.loadScene("robot.dae", CAssimpModel::LoadFlags::RealTimeMaxQuality); scene->insert(model);
Textures are loaded from paths relative to the model file’s directory
Parameters:
file_name |
Path to the 3D model file |
flags |
Combination of LoadFlags values (OR’d together) |
std::runtime_error |
On any error during loading or importing |