diff options
Diffstat (limited to 'src/3rdparty/assimp/code/XFileHelper.h')
-rw-r--r-- | src/3rdparty/assimp/code/XFileHelper.h | 205 |
1 files changed, 106 insertions, 99 deletions
diff --git a/src/3rdparty/assimp/code/XFileHelper.h b/src/3rdparty/assimp/code/XFileHelper.h index 792055437..484952106 100644 --- a/src/3rdparty/assimp/code/XFileHelper.h +++ b/src/3rdparty/assimp/code/XFileHelper.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. ---------------------------------------------------------------------- @@ -45,11 +45,13 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <string> #include <vector> +#include <stdint.h> -#include "../include/assimp/types.h" -#include "../include/assimp/quaternion.h" -#include "../include/assimp/mesh.h" -#include "../include/assimp/anim.h" +#include <assimp/types.h> +#include <assimp/quaternion.h> +#include <assimp/mesh.h> +#include <assimp/anim.h> +#include "Defines.h" namespace Assimp { @@ -59,141 +61,146 @@ namespace XFile /** Helper structure representing a XFile mesh face */ struct Face { - std::vector<unsigned int> mIndices; + std::vector<unsigned int> mIndices; }; /** Helper structure representing a texture filename inside a material and its potential source */ struct TexEntry { - std::string mName; - bool mIsNormalMap; // true if the texname was specified in a NormalmapFilename tag + std::string mName; + bool mIsNormalMap; // true if the texname was specified in a NormalmapFilename tag - TexEntry() { mIsNormalMap = false; } - TexEntry( const std::string& pName, bool pIsNormalMap = false) - : mName( pName), mIsNormalMap( pIsNormalMap) - { /* done */ } + TexEntry() { mIsNormalMap = false; } + TexEntry( const std::string& pName, bool pIsNormalMap = false) + : mName( pName), mIsNormalMap( pIsNormalMap) + { /* done */ } }; /** Helper structure representing a XFile material */ struct Material { - std::string mName; - bool mIsReference; // if true, mName holds a name by which the actual material can be found in the material list - aiColor4D mDiffuse; - float mSpecularExponent; - aiColor3D mSpecular; - aiColor3D mEmissive; - std::vector<TexEntry> mTextures; - - size_t sceneIndex; ///< the index under which it was stored in the scene's material list - - Material() { mIsReference = false; sceneIndex = SIZE_MAX; } + std::string mName; + bool mIsReference; // if true, mName holds a name by which the actual material can be found in the material list + aiColor4D mDiffuse; + float mSpecularExponent; + aiColor3D mSpecular; + aiColor3D mEmissive; + std::vector<TexEntry> mTextures; + + size_t sceneIndex; ///< the index under which it was stored in the scene's material list + + Material() + : mIsReference(false), + mSpecularExponent(), + sceneIndex(SIZE_MAX) + {} }; /** Helper structure to represent a bone weight */ struct BoneWeight { - unsigned int mVertex; - float mWeight; + unsigned int mVertex; + float mWeight; }; /** Helper structure to represent a bone in a mesh */ struct Bone { - std::string mName; - std::vector<BoneWeight> mWeights; - aiMatrix4x4 mOffsetMatrix; + std::string mName; + std::vector<BoneWeight> mWeights; + aiMatrix4x4 mOffsetMatrix; }; /** Helper structure to represent an XFile mesh */ struct Mesh { - std::vector<aiVector3D> mPositions; - std::vector<Face> mPosFaces; - std::vector<aiVector3D> mNormals; - std::vector<Face> mNormFaces; - unsigned int mNumTextures; - std::vector<aiVector2D> mTexCoords[AI_MAX_NUMBER_OF_TEXTURECOORDS]; - unsigned int mNumColorSets; - std::vector<aiColor4D> mColors[AI_MAX_NUMBER_OF_COLOR_SETS]; - - std::vector<unsigned int> mFaceMaterials; - std::vector<Material> mMaterials; - - std::vector<Bone> mBones; - - Mesh() { mNumTextures = 0; mNumColorSets = 0; } + std::string mName; + std::vector<aiVector3D> mPositions; + std::vector<Face> mPosFaces; + std::vector<aiVector3D> mNormals; + std::vector<Face> mNormFaces; + unsigned int mNumTextures; + std::vector<aiVector2D> mTexCoords[AI_MAX_NUMBER_OF_TEXTURECOORDS]; + unsigned int mNumColorSets; + std::vector<aiColor4D> mColors[AI_MAX_NUMBER_OF_COLOR_SETS]; + + std::vector<unsigned int> mFaceMaterials; + std::vector<Material> mMaterials; + + std::vector<Bone> mBones; + + explicit Mesh(const std::string &pName = "") { mName = pName; mNumTextures = 0; mNumColorSets = 0; } }; /** Helper structure to represent a XFile frame */ struct Node { - std::string mName; - aiMatrix4x4 mTrafoMatrix; - Node* mParent; - std::vector<Node*> mChildren; - std::vector<Mesh*> mMeshes; - - Node() { mParent = NULL; } - Node( Node* pParent) { mParent = pParent; } - ~Node() - { - for( unsigned int a = 0; a < mChildren.size(); a++) - delete mChildren[a]; - for( unsigned int a = 0; a < mMeshes.size(); a++) - delete mMeshes[a]; - } + std::string mName; + aiMatrix4x4 mTrafoMatrix; + Node* mParent; + std::vector<Node*> mChildren; + std::vector<Mesh*> mMeshes; + + Node() { mParent = NULL; } + explicit Node( Node* pParent) { mParent = pParent; } + ~Node() + { + for( unsigned int a = 0; a < mChildren.size(); a++) + delete mChildren[a]; + for( unsigned int a = 0; a < mMeshes.size(); a++) + delete mMeshes[a]; + } }; struct MatrixKey { - double mTime; - aiMatrix4x4 mMatrix; + double mTime; + aiMatrix4x4 mMatrix; }; /** Helper structure representing a single animated bone in a XFile */ struct AnimBone { - std::string mBoneName; - std::vector<aiVectorKey> mPosKeys; // either three separate key sequences for position, rotation, scaling - std::vector<aiQuatKey> mRotKeys; - std::vector<aiVectorKey> mScaleKeys; - std::vector<MatrixKey> mTrafoKeys; // or a combined key sequence of transformation matrices. + std::string mBoneName; + std::vector<aiVectorKey> mPosKeys; // either three separate key sequences for position, rotation, scaling + std::vector<aiQuatKey> mRotKeys; + std::vector<aiVectorKey> mScaleKeys; + std::vector<MatrixKey> mTrafoKeys; // or a combined key sequence of transformation matrices. }; /** Helper structure to represent an animation set in a XFile */ struct Animation { - std::string mName; - std::vector<AnimBone*> mAnims; - - ~Animation() - { - for( unsigned int a = 0; a < mAnims.size(); a++) - delete mAnims[a]; - } + std::string mName; + std::vector<AnimBone*> mAnims; + + ~Animation() + { + for( unsigned int a = 0; a < mAnims.size(); a++) + delete mAnims[a]; + } }; /** Helper structure analogue to aiScene */ struct Scene { - Node* mRootNode; - - std::vector<Mesh*> mGlobalMeshes; // global meshes found outside of any frames - std::vector<Material> mGlobalMaterials; // global materials found outside of any meshes. - - std::vector<Animation*> mAnims; - unsigned int mAnimTicksPerSecond; - - Scene() { mRootNode = NULL; mAnimTicksPerSecond = 0; } - ~Scene() - { - delete mRootNode; - for( unsigned int a = 0; a < mGlobalMeshes.size(); a++) - delete mGlobalMeshes[a]; - for( unsigned int a = 0; a < mAnims.size(); a++) - delete mAnims[a]; - } + Node* mRootNode; + + std::vector<Mesh*> mGlobalMeshes; // global meshes found outside of any frames + std::vector<Material> mGlobalMaterials; // global materials found outside of any meshes. + + std::vector<Animation*> mAnims; + unsigned int mAnimTicksPerSecond; + + Scene() { mRootNode = NULL; mAnimTicksPerSecond = 0; } + ~Scene() + { + delete mRootNode; + for( unsigned int a = 0; a < mGlobalMeshes.size(); a++) + delete mGlobalMeshes[a]; + for( unsigned int a = 0; a < mAnims.size(); a++) + delete mAnims[a]; + } }; } // end of namespace XFile |