diff options
Diffstat (limited to 'src/3rdparty/assimp/code/ColladaLoader.h')
-rw-r--r-- | src/3rdparty/assimp/code/ColladaLoader.h | 163 |
1 files changed, 86 insertions, 77 deletions
diff --git a/src/3rdparty/assimp/code/ColladaLoader.h b/src/3rdparty/assimp/code/ColladaLoader.h index 3c993d100..16750906f 100644 --- a/src/3rdparty/assimp/code/ColladaLoader.h +++ b/src/3rdparty/assimp/code/ColladaLoader.h @@ -4,11 +4,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 @@ -25,16 +25,16 @@ contributors may be used to endorse or promote products 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. ---------------------------------------------------------------------- @@ -46,47 +46,53 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "BaseImporter.h" #include "ColladaParser.h" +struct aiNode; +struct aiCamera; +struct aiLight; +struct aiTexture; +struct aiAnimation; + namespace Assimp { struct ColladaMeshIndex { - std::string mMeshID; - size_t mSubMesh; - std::string mMaterial; - ColladaMeshIndex( const std::string& pMeshID, size_t pSubMesh, const std::string& pMaterial) - : mMeshID( pMeshID), mSubMesh( pSubMesh), mMaterial( pMaterial) - { } - - bool operator < (const ColladaMeshIndex& p) const - { - if( mMeshID == p.mMeshID) - { - if( mSubMesh == p.mSubMesh) - return mMaterial < p.mMaterial; - else - return mSubMesh < p.mSubMesh; - } else - { - return mMeshID < p.mMeshID; - } - } + std::string mMeshID; + size_t mSubMesh; + std::string mMaterial; + ColladaMeshIndex( const std::string& pMeshID, size_t pSubMesh, const std::string& pMaterial) + : mMeshID( pMeshID), mSubMesh( pSubMesh), mMaterial( pMaterial) + { } + + bool operator < (const ColladaMeshIndex& p) const + { + if( mMeshID == p.mMeshID) + { + if( mSubMesh == p.mSubMesh) + return mMaterial < p.mMaterial; + else + return mSubMesh < p.mSubMesh; + } else + { + return mMeshID < p.mMeshID; + } + } }; /** Loader class to read Collada scenes. Collada is over-engineered to death, with every new iteration bringing - * more useless stuff, so I limited the data to what I think is useful for games. + * more useless stuff, so I limited the data to what I think is useful for games. */ class ColladaLoader : public BaseImporter { public: - ColladaLoader(); - ~ColladaLoader(); + ColladaLoader(); + ~ColladaLoader(); 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: /** Return importer meta information. @@ -96,7 +102,7 @@ protected: void SetupProperties(const Importer* pImp); - /** Imports the given file into the given scene structure. + /** Imports the given file into the given scene structure. * See BaseImporter::InternReadFile() for details */ void InternReadFile( const std::string& pFile, aiScene* pScene, IOSystem* pIOHandler); @@ -106,25 +112,25 @@ protected: /** Resolve node instances */ void ResolveNodeInstances( const ColladaParser& pParser, const Collada::Node* pNode, - std::vector<const Collada::Node*>& resolved); + std::vector<const Collada::Node*>& resolved); /** Builds meshes for the given node and references them */ - void BuildMeshesForNode( const ColladaParser& pParser, const Collada::Node* pNode, - aiNode* pTarget); + void BuildMeshesForNode( const ColladaParser& pParser, const Collada::Node* pNode, + aiNode* pTarget); - aiMesh *findMesh(std::string meshid); + aiMesh *findMesh(std::string meshid); /** Creates a mesh for the given ColladaMesh face subset and returns the newly created mesh */ - aiMesh* CreateMesh( const ColladaParser& pParser, const Collada::Mesh* pSrcMesh, const Collada::SubMesh& pSubMesh, - const Collada::Controller* pSrcController, size_t pStartVertex, size_t pStartFace); + aiMesh* CreateMesh( const ColladaParser& pParser, const Collada::Mesh* pSrcMesh, const Collada::SubMesh& pSubMesh, + const Collada::Controller* pSrcController, size_t pStartVertex, size_t pStartFace); /** Builds cameras for the given node and references them */ - void BuildCamerasForNode( const ColladaParser& pParser, const Collada::Node* pNode, - aiNode* pTarget); + void BuildCamerasForNode( const ColladaParser& pParser, const Collada::Node* pNode, + aiNode* pTarget); /** Builds lights for the given node and references them */ - void BuildLightsForNode( const ColladaParser& pParser, const Collada::Node* pNode, - aiNode* pTarget); + void BuildLightsForNode( const ColladaParser& pParser, const Collada::Node* pNode, + aiNode* pTarget); /** Stores all meshes in the given scene */ void StoreSceneMeshes( aiScene* pScene); @@ -141,7 +147,7 @@ protected: /** Stores all textures in the given scene */ void StoreSceneTextures( aiScene* pScene); - /** Stores all animations + /** Stores all animations * @param pScene target scene to store the anims */ void StoreAnimations( aiScene* pScene, const ColladaParser& pParser); @@ -151,11 +157,11 @@ protected: * @param pSrcAnim the source animation to process * @param pPrefix Prefix to the name in case of nested animations */ - void StoreAnimations( aiScene* pScene, const ColladaParser& pParser, const Collada::Animation* pSrcAnim, const std::string pPrefix); + void StoreAnimations( aiScene* pScene, const ColladaParser& pParser, const Collada::Animation* pSrcAnim, const std::string &pPrefix); /** Constructs the animation for the given source anim */ void CreateAnimation( aiScene* pScene, const ColladaParser& pParser, const Collada::Animation* pSrcAnim, const std::string& pName); - + /** Constructs materials from the collada material definitions */ void BuildMaterials( ColladaParser& pParser, aiScene* pScene); @@ -164,17 +170,17 @@ protected: /** Resolve UV channel mappings*/ void ApplyVertexToEffectSemanticMapping(Collada::Sampler& sampler, - const Collada::SemanticMappingTable& table); + const Collada::SemanticMappingTable& table); /** Add a texture and all of its sampling properties to a material*/ void AddTexture ( aiMaterial& mat, const ColladaParser& pParser, - const Collada::Effect& effect, - const Collada::Sampler& sampler, - aiTextureType type, unsigned int idx = 0); + const Collada::Effect& effect, + const Collada::Sampler& sampler, + aiTextureType type, unsigned int idx = 0); /** Resolves the texture name for the given effect texture entry */ - aiString FindFilenameForEffectTexture( const ColladaParser& pParser, - const Collada::Effect& pEffect, const std::string& pName); + aiString FindFilenameForEffectTexture( const ColladaParser& pParser, + const Collada::Effect& pEffect, const std::string& pName); /** Converts a path read from a collada file to the usual representation */ void ConvertPath( aiString& ss); @@ -205,41 +211,44 @@ protected: const Collada::Node* FindNodeBySID( const Collada::Node* pNode, const std::string& pSID) const; /** Finds a proper name for a node derived from the collada-node's properties */ - std::string FindNameForNode( const Collada::Node* pNode) const; + std::string FindNameForNode( const Collada::Node* pNode); protected: - /** Filename, for a verbose error message */ - std::string mFileName; + /** Filename, for a verbose error message */ + std::string mFileName; - /** Which mesh-material compound was stored under which mesh ID */ - std::map<ColladaMeshIndex, size_t> mMeshIndexByID; + /** Which mesh-material compound was stored under which mesh ID */ + std::map<ColladaMeshIndex, size_t> mMeshIndexByID; - /** Which material was stored under which index in the scene */ - std::map<std::string, size_t> mMaterialIndexByName; + /** Which material was stored under which index in the scene */ + std::map<std::string, size_t> mMaterialIndexByName; - /** Accumulated meshes for the target scene */ - std::vector<aiMesh*> mMeshes; + /** Accumulated meshes for the target scene */ + std::vector<aiMesh*> mMeshes; - /** Accumulated morph target meshes */ - std::vector<aiMesh*> mTargetMeshes; + /** Accumulated morph target meshes */ + std::vector<aiMesh*> mTargetMeshes; /** Temporary material list */ std::vector<std::pair<Collada::Effect*, aiMaterial*> > newMats; - /** Temporary camera list */ - std::vector<aiCamera*> mCameras; + /** Temporary camera list */ + std::vector<aiCamera*> mCameras; + + /** Temporary light list */ + std::vector<aiLight*> mLights; - /** Temporary light list */ - std::vector<aiLight*> mLights; + /** Temporary texture list */ + std::vector<aiTexture*> mTextures; - /** Temporary texture list */ - std::vector<aiTexture*> mTextures; + /** Accumulated animations for the target scene */ + std::vector<aiAnimation*> mAnims; - /** Accumulated animations for the target scene */ - std::vector<aiAnimation*> mAnims; + bool noSkeletonMesh; + bool ignoreUpDirection; - bool noSkeletonMesh; - bool ignoreUpDirection; + /** Used by FindNameForNode() to generate unique node names */ + unsigned int mNodeNameCounter; }; } // end of namespace Assimp |