From 058f98a63658dc1a2579826ba167fd61bed1e21f Mon Sep 17 00:00:00 2001 From: sanine Date: Fri, 4 Mar 2022 10:47:15 -0600 Subject: add assimp submodule --- .../assimp-master/code/AssetLib/X/XFileHelper.h | 234 +++++++++++++++++++++ 1 file changed, 234 insertions(+) create mode 100644 src/mesh/assimp-master/code/AssetLib/X/XFileHelper.h (limited to 'src/mesh/assimp-master/code/AssetLib/X/XFileHelper.h') diff --git a/src/mesh/assimp-master/code/AssetLib/X/XFileHelper.h b/src/mesh/assimp-master/code/AssetLib/X/XFileHelper.h new file mode 100644 index 0000000..3830eb4 --- /dev/null +++ b/src/mesh/assimp-master/code/AssetLib/X/XFileHelper.h @@ -0,0 +1,234 @@ +/* +Open Asset Import Library (assimp) +---------------------------------------------------------------------- + +Copyright (c) 2006-2022, 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 +following conditions are met: + +* Redistributions of source code must retain the above + copyright notice, this list of conditions and the + following disclaimer. + +* Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the + following disclaimer in the documentation and/or other + materials provided with the distribution. + +* Neither the name of the assimp team, nor the names of its + 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 +LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +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 +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 +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +---------------------------------------------------------------------- +*/ + +/** @file Defines the helper data structures for importing XFiles */ +#ifndef AI_XFILEHELPER_H_INC +#define AI_XFILEHELPER_H_INC + +#include +#include +#include + +#include +#include +#include +#include + +namespace Assimp { +namespace XFile { + +/** Helper structure representing a XFile mesh face */ +struct Face { + std::vector 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 + + TexEntry() AI_NO_EXCEPT : + mName(), + mIsNormalMap(false) { + // empty + } + TexEntry(const std::string &pName, bool pIsNormalMap = false) : + mName(pName), mIsNormalMap(pIsNormalMap) { + // empty + } +}; + +/** 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; + ai_real mSpecularExponent; + aiColor3D mSpecular; + aiColor3D mEmissive; + std::vector mTextures; + size_t sceneIndex; ///< the index under which it was stored in the scene's material list + + Material() AI_NO_EXCEPT : + mIsReference(false), + mSpecularExponent(), + sceneIndex(SIZE_MAX) { + // empty + } +}; + +/** Helper structure to represent a bone weight */ +struct BoneWeight { + unsigned int mVertex; + ai_real mWeight; +}; + +/** Helper structure to represent a bone in a mesh */ +struct Bone { + std::string mName; + std::vector mWeights; + aiMatrix4x4 mOffsetMatrix; +}; + +/** Helper structure to represent an XFile mesh */ +struct Mesh { + std::string mName; + std::vector mPositions; + std::vector mPosFaces; + std::vector mNormals; + std::vector mNormFaces; + unsigned int mNumTextures; + std::vector mTexCoords[AI_MAX_NUMBER_OF_TEXTURECOORDS]; + unsigned int mNumColorSets; + std::vector mColors[AI_MAX_NUMBER_OF_COLOR_SETS]; + + std::vector mFaceMaterials; + std::vector mMaterials; + + std::vector mBones; + + explicit Mesh(const std::string &pName = std::string()) AI_NO_EXCEPT + : mName(pName), + mPositions(), + mPosFaces(), + mNormals(), + mNormFaces(), + mNumTextures(0), + mTexCoords{}, + mNumColorSets(0), + mColors{}, + mFaceMaterials(), + mMaterials(), + mBones() { + // empty + } +}; + +/** Helper structure to represent a XFile frame */ +struct Node { + std::string mName; + aiMatrix4x4 mTrafoMatrix; + Node *mParent; + std::vector mChildren; + std::vector mMeshes; + + Node() AI_NO_EXCEPT + : mName(), + mTrafoMatrix(), + mParent(nullptr), + mChildren(), + mMeshes() { + // empty + } + explicit Node(Node *pParent) : + mName(), mTrafoMatrix(), mParent(pParent), mChildren(), mMeshes() { + // empty + } + + ~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; +}; + +/** Helper structure representing a single animated bone in a XFile */ +struct AnimBone { + std::string mBoneName; + std::vector mPosKeys; // either three separate key sequences for position, rotation, scaling + std::vector mRotKeys; + std::vector mScaleKeys; + std::vector 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 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 mGlobalMeshes; // global meshes found outside of any frames + std::vector mGlobalMaterials; // global materials found outside of any meshes. + + std::vector mAnims; + unsigned int mAnimTicksPerSecond; + + Scene() AI_NO_EXCEPT + : mRootNode(nullptr), + mGlobalMeshes(), + mGlobalMaterials(), + mAnimTicksPerSecond(0) { + // empty + } + ~Scene() { + delete mRootNode; + mRootNode = nullptr; + 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 +} // end of namespace Assimp + +#endif // AI_XFILEHELPER_H_INC -- cgit v1.2.1