diff options
author | Sean Harmer <sean.harmer@kdab.com> | 2017-05-24 12:09:44 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2017-05-24 12:10:02 +0100 |
commit | 77d294db076dac19e8b549b445ffede9f7260c84 (patch) | |
tree | 828ee7a6862ec5c0bd24f97cb540625a2c647376 /src/3rdparty/assimp/code/IRRLoader.h | |
parent | 59f8fec8a41606b3185fe3a4e276978e3e1ed5ef (diff) | |
parent | 939b9b4b7591e8a421cf048a0a84ed3e75d81d21 (diff) |
Merge branch 'dev' into wip/animationwip/animation
Change-Id: I6e770609c90a7745d08fa4e2f424e865678c5d6f
Diffstat (limited to 'src/3rdparty/assimp/code/IRRLoader.h')
-rw-r--r-- | src/3rdparty/assimp/code/IRRLoader.h | 471 |
1 files changed, 238 insertions, 233 deletions
diff --git a/src/3rdparty/assimp/code/IRRLoader.h b/src/3rdparty/assimp/code/IRRLoader.h index d0765976c..129e0cc03 100644 --- a/src/3rdparty/assimp/code/IRRLoader.h +++ b/src/3rdparty/assimp/code/IRRLoader.h @@ -2,11 +2,11 @@ Open Asset Import Library (assimp) ---------------------------------------------------------------------- -Copyright (c) 2006-2012, assimp team +Copyright (c) 2006-2016, assimp team All rights reserved. -Redistribution and use of this software in source and binary forms, -with or without modification, are permitted provided that the +Redistribution and use of this software in source and binary forms, +with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above @@ -23,16 +23,16 @@ following conditions are met: derived from this software without specific prior written permission of the assimp team. -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ---------------------------------------------------------------------- @@ -48,8 +48,11 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "IRRShared.h" #include "SceneCombiner.h" +#include "Importer.h" +#include "StringUtils.h" +#include <assimp/anim.h> -namespace Assimp { +namespace Assimp { // --------------------------------------------------------------------------- @@ -62,245 +65,247 @@ namespace Assimp { class IRRImporter : public BaseImporter, public IrrlichtBase { public: - IRRImporter(); - ~IRRImporter(); + IRRImporter(); + ~IRRImporter(); public: - // ------------------------------------------------------------------- - /** Returns whether the class can handle the format of the given file. - * See BaseImporter::CanRead() for details. - */ - bool CanRead( const std::string& pFile, IOSystem* pIOHandler, - bool checkSig) const; + // ------------------------------------------------------------------- + /** Returns whether the class can handle the format of the given file. + * See BaseImporter::CanRead() for details. + */ + bool CanRead( const std::string& pFile, IOSystem* pIOHandler, + bool checkSig) const; protected: - // ------------------------------------------------------------------- - /** - */ - const aiImporterDesc* GetInfo () const; + // ------------------------------------------------------------------- + /** + */ + const aiImporterDesc* GetInfo () const; - // ------------------------------------------------------------------- - /** - */ - void InternReadFile( const std::string& pFile, aiScene* pScene, - IOSystem* pIOHandler); + // ------------------------------------------------------------------- + /** + */ + void InternReadFile( const std::string& pFile, aiScene* pScene, + IOSystem* pIOHandler); - // ------------------------------------------------------------------- - /** - */ - void SetupProperties(const Importer* pImp); + // ------------------------------------------------------------------- + /** + */ + void SetupProperties(const Importer* pImp); private: - /** Data structure for a scenegraph node animator - */ - struct Animator - { - // Type of the animator - enum AT - { - UNKNOWN = 0x0, - ROTATION = 0x1, - FLY_CIRCLE = 0x2, - FLY_STRAIGHT = 0x3, - FOLLOW_SPLINE = 0x4, - OTHER = 0x5 - - } type; - - Animator(AT t = UNKNOWN) - : type (t) - , speed (0.001f) - , direction (0.f,1.f,0.f) - , circleRadius (1.f) - , tightness (0.5f) - , loop (true) - , timeForWay (100) - { - } - - - // common parameters - float speed; - aiVector3D direction; - - // FLY_CIRCLE - aiVector3D circleCenter; - float circleRadius; - - // FOLLOW_SPLINE - float tightness; - std::vector<aiVectorKey> splineKeys; - - // ROTATION (angles given in direction) - - // FLY STRAIGHT - // circleCenter = start, direction = end - bool loop; - int timeForWay; - }; - - /** Data structure for a scenegraph node in an IRR file - */ - struct Node - { - // Type of the node - enum ET - { - LIGHT, - CUBE, - MESH, - SKYBOX, - DUMMY, - CAMERA, - TERRAIN, - SPHERE, - ANIMMESH - } type; - - Node(ET t) - : type (t) - , scaling (1.f,1.f,1.f) // assume uniform scaling by default - , framesPerSecond (0.f) - , sphereRadius (1.f) - , spherePolyCountX (100) - , spherePolyCountY (100) - { - - // Generate a default name for the node - char buffer[128]; - static int cnt; - ::sprintf(buffer,"IrrNode_%i",cnt++); - name = std::string(buffer); - - // reserve space for up to 5 materials - materials.reserve(5); - - // reserve space for up to 5 children - children.reserve(5); - } - - // Transformation of the node - aiVector3D position, rotation, scaling; - - // Name of the node - std::string name; - - // List of all child nodes - std::vector<Node*> children; - - // Parent node - Node* parent; - - // Animated meshes: frames per second - // 0.f if not specified - float framesPerSecond; - - // Meshes: path to the mesh to be loaded - std::string meshPath; - unsigned int id; - - // Meshes: List of materials to be assigned - // along with their corresponding material flags - std::vector< std::pair<aiMaterial*, unsigned int> > materials; - - // Spheres: radius of the sphere to be generates - float sphereRadius; - - // Spheres: Number of polygons in the x,y direction - unsigned int spherePolyCountX,spherePolyCountY; - - // List of all animators assigned to the node - std::list<Animator> animators; - }; - - /** Data structure for a vertex in an IRR skybox - */ - struct SkyboxVertex - { - SkyboxVertex() - {} - - //! Construction from single vertex components - SkyboxVertex(float px, float py, float pz, - float nx, float ny, float nz, - float uvx, float uvy) - - : position (px,py,pz) - , normal (nx,ny,nz) - , uv (uvx,uvy,0.f) - {} - - aiVector3D position, normal, uv; - }; - - - // ------------------------------------------------------------------- - /** Fill the scenegraph recursively - */ - void GenerateGraph(Node* root,aiNode* rootOut ,aiScene* scene, - BatchLoader& batch, - std::vector<aiMesh*>& meshes, - std::vector<aiNodeAnim*>& anims, - std::vector<AttachmentInfo>& attach, - std::vector<aiMaterial*>& materials, - unsigned int& defaultMatIdx); - - - // ------------------------------------------------------------------- - /** Generate a mesh that consists of just a single quad - */ - aiMesh* BuildSingleQuadMesh(const SkyboxVertex& v1, - const SkyboxVertex& v2, - const SkyboxVertex& v3, - const SkyboxVertex& v4); - - - // ------------------------------------------------------------------- - /** Build a skybox - * - * @param meshes Receives 6 output meshes - * @param materials The last 6 materials are assigned to the newly - * created meshes. The names of the materials are adjusted. - */ - void BuildSkybox(std::vector<aiMesh*>& meshes, - std::vector<aiMaterial*> materials); - - - // ------------------------------------------------------------------- - /** Copy a material for a mesh to the output material list - * - * @param materials Receives an output material - * @param inmaterials List of input materials - * @param defMatIdx Default material index - UINT_MAX if not present - * @param mesh Mesh to work on - */ - void CopyMaterial(std::vector<aiMaterial*>& materials, - std::vector< std::pair<aiMaterial*, unsigned int> >& inmaterials, - unsigned int& defMatIdx, - aiMesh* mesh); - - - // ------------------------------------------------------------------- - /** Compute animations for a specific node - * - * @param root Node to be processed - * @param anims The list of output animations - */ - void ComputeAnimations(Node* root, aiNode* real, - std::vector<aiNodeAnim*>& anims); + /** Data structure for a scenegraph node animator + */ + struct Animator + { + // Type of the animator + enum AT + { + UNKNOWN = 0x0, + ROTATION = 0x1, + FLY_CIRCLE = 0x2, + FLY_STRAIGHT = 0x3, + FOLLOW_SPLINE = 0x4, + OTHER = 0x5 + + } type; + + explicit Animator(AT t = UNKNOWN) + : type (t) + , speed (0.001f) + , direction (0.f,1.f,0.f) + , circleRadius (1.f) + , tightness (0.5f) + , loop (true) + , timeForWay (100) + { + } + + + // common parameters + float speed; + aiVector3D direction; + + // FLY_CIRCLE + aiVector3D circleCenter; + float circleRadius; + + // FOLLOW_SPLINE + float tightness; + std::vector<aiVectorKey> splineKeys; + + // ROTATION (angles given in direction) + + // FLY STRAIGHT + // circleCenter = start, direction = end + bool loop; + int timeForWay; + }; + + /** Data structure for a scenegraph node in an IRR file + */ + struct Node + { + // Type of the node + enum ET + { + LIGHT, + CUBE, + MESH, + SKYBOX, + DUMMY, + CAMERA, + TERRAIN, + SPHERE, + ANIMMESH + } type; + + explicit Node(ET t) + : type (t) + , scaling (1.f,1.f,1.f) // assume uniform scaling by default + , parent() + , framesPerSecond (0.f) + , id() + , sphereRadius (1.f) + , spherePolyCountX (100) + , spherePolyCountY (100) + { + + // Generate a default name for the node + char buffer[128]; + static int cnt; + ai_snprintf(buffer, 128, "IrrNode_%i",cnt++); + name = std::string(buffer); + + // reserve space for up to 5 materials + materials.reserve(5); + + // reserve space for up to 5 children + children.reserve(5); + } + + // Transformation of the node + aiVector3D position, rotation, scaling; + + // Name of the node + std::string name; + + // List of all child nodes + std::vector<Node*> children; + + // Parent node + Node* parent; + + // Animated meshes: frames per second + // 0.f if not specified + float framesPerSecond; + + // Meshes: path to the mesh to be loaded + std::string meshPath; + unsigned int id; + + // Meshes: List of materials to be assigned + // along with their corresponding material flags + std::vector< std::pair<aiMaterial*, unsigned int> > materials; + + // Spheres: radius of the sphere to be generates + float sphereRadius; + + // Spheres: Number of polygons in the x,y direction + unsigned int spherePolyCountX,spherePolyCountY; + + // List of all animators assigned to the node + std::list<Animator> animators; + }; + + /** Data structure for a vertex in an IRR skybox + */ + struct SkyboxVertex + { + SkyboxVertex() + {} + + //! Construction from single vertex components + SkyboxVertex(float px, float py, float pz, + float nx, float ny, float nz, + float uvx, float uvy) + + : position (px,py,pz) + , normal (nx,ny,nz) + , uv (uvx,uvy,0.f) + {} + + aiVector3D position, normal, uv; + }; + + + // ------------------------------------------------------------------- + /** Fill the scenegraph recursively + */ + void GenerateGraph(Node* root,aiNode* rootOut ,aiScene* scene, + BatchLoader& batch, + std::vector<aiMesh*>& meshes, + std::vector<aiNodeAnim*>& anims, + std::vector<AttachmentInfo>& attach, + std::vector<aiMaterial*>& materials, + unsigned int& defaultMatIdx); + + + // ------------------------------------------------------------------- + /** Generate a mesh that consists of just a single quad + */ + aiMesh* BuildSingleQuadMesh(const SkyboxVertex& v1, + const SkyboxVertex& v2, + const SkyboxVertex& v3, + const SkyboxVertex& v4); + + + // ------------------------------------------------------------------- + /** Build a skybox + * + * @param meshes Receives 6 output meshes + * @param materials The last 6 materials are assigned to the newly + * created meshes. The names of the materials are adjusted. + */ + void BuildSkybox(std::vector<aiMesh*>& meshes, + std::vector<aiMaterial*> materials); + + + // ------------------------------------------------------------------- + /** Copy a material for a mesh to the output material list + * + * @param materials Receives an output material + * @param inmaterials List of input materials + * @param defMatIdx Default material index - UINT_MAX if not present + * @param mesh Mesh to work on + */ + void CopyMaterial(std::vector<aiMaterial*>& materials, + std::vector< std::pair<aiMaterial*, unsigned int> >& inmaterials, + unsigned int& defMatIdx, + aiMesh* mesh); + + + // ------------------------------------------------------------------- + /** Compute animations for a specific node + * + * @param root Node to be processed + * @param anims The list of output animations + */ + void ComputeAnimations(Node* root, aiNode* real, + std::vector<aiNodeAnim*>& anims); private: - /** Configuration option: desired output FPS */ - double fps; + /** Configuration option: desired output FPS */ + double fps; - /** Configuration option: speed flag was set? */ - bool configSpeedFlag; + /** Configuration option: speed flag was set? */ + bool configSpeedFlag; }; } // end of namespace Assimp |