diff options
Diffstat (limited to 'src/3rdparty/assimp/code/ObjFileData.h')
-rw-r--r-- | src/3rdparty/assimp/code/ObjFileData.h | 562 |
1 files changed, 286 insertions, 276 deletions
diff --git a/src/3rdparty/assimp/code/ObjFileData.h b/src/3rdparty/assimp/code/ObjFileData.h index 6067e21e7..f4abd643f 100644 --- a/src/3rdparty/assimp/code/ObjFileData.h +++ b/src/3rdparty/assimp/code/ObjFileData.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. ---------------------------------------------------------------------- @@ -43,300 +43,310 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include <vector> #include <map> -#include "../include/assimp/types.h" -#include "../include/assimp/mesh.h" +#include <assimp/types.h> +#include <assimp/mesh.h> -namespace Assimp -{ +namespace Assimp { +namespace ObjFile { -namespace ObjFile -{ -// ------------------------------------------------------------------------------------------------ struct Object; struct Face; struct Material; // ------------------------------------------------------------------------------------------------ -//! \struct Face -//! \brief Data structure for a simple obj-face, describes discredit,l.ation and materials +//! \struct Face +//! \brief Data structure for a simple obj-face, describes discredit,l.ation and materials struct Face { - typedef std::vector<unsigned int> IndexArray; - - //! Primitive type - aiPrimitiveType m_PrimitiveType; - //! Vertex indices - IndexArray *m_pVertices; - //! Normal indices - IndexArray *m_pNormals; - //! Texture coordinates indices - IndexArray *m_pTexturCoords; - //! Pointer to assigned material - Material *m_pMaterial; - - //! \brief Default constructor - //! \param pVertices Pointer to assigned vertex indexbuffer - //! \param pNormals Pointer to assigned normals indexbuffer - //! \param pTexCoords Pointer to assigned texture indexbuffer - Face( std::vector<unsigned int> *pVertices, - std::vector<unsigned int> *pNormals, - std::vector<unsigned int> *pTexCoords, - aiPrimitiveType pt = aiPrimitiveType_POLYGON) : - m_PrimitiveType( pt ), - m_pVertices( pVertices ), - m_pNormals( pNormals ), - m_pTexturCoords( pTexCoords ), - m_pMaterial( 0L ) - { - // empty - } - - //! \brief Destructor - ~Face() - { - delete m_pVertices; - m_pVertices = NULL; - - delete m_pNormals; - m_pNormals = NULL; - - delete m_pTexturCoords; - m_pTexturCoords = NULL; - } + typedef std::vector<unsigned int> IndexArray; + + //! Primitive type + aiPrimitiveType m_PrimitiveType; + //! Vertex indices + IndexArray *m_pVertices; + //! Normal indices + IndexArray *m_pNormals; + //! Texture coordinates indices + IndexArray *m_pTexturCoords; + //! Pointer to assigned material + Material *m_pMaterial; + + //! \brief Default constructor + //! \param pVertices Pointer to assigned vertex indexbuffer + //! \param pNormals Pointer to assigned normals indexbuffer + //! \param pTexCoords Pointer to assigned texture indexbuffer + Face( std::vector<unsigned int> *pVertices, + std::vector<unsigned int> *pNormals, + std::vector<unsigned int> *pTexCoords, + aiPrimitiveType pt = aiPrimitiveType_POLYGON) : + m_PrimitiveType( pt ), + m_pVertices( pVertices ), + m_pNormals( pNormals ), + m_pTexturCoords( pTexCoords ), + m_pMaterial( 0L ) + { + // empty + } + + //! \brief Destructor + ~Face() + { + delete m_pVertices; + m_pVertices = NULL; + + delete m_pNormals; + m_pNormals = NULL; + + delete m_pTexturCoords; + m_pTexturCoords = NULL; + } }; // ------------------------------------------------------------------------------------------------ -//! \struct Object -//! \brief Stores all objects of an objfile object definition +//! \struct Object +//! \brief Stores all objects of an objfile object definition struct Object { - enum ObjectType - { - ObjType, - GroupType - }; - - //! Object name - std::string m_strObjName; - //! Transformation matrix, stored in OpenGL format - aiMatrix4x4 m_Transformation; - //! All sub-objects referenced by this object - std::vector<Object*> m_SubObjects; - /// Assigned meshes - std::vector<unsigned int> m_Meshes; - - //! \brief Default constructor - Object() : - m_strObjName("") - { - // empty - } - - //! \brief Destructor - ~Object() - { - for (std::vector<Object*>::iterator it = m_SubObjects.begin(); - it != m_SubObjects.end(); ++it) - { - delete *it; - } - m_SubObjects.clear(); - } + enum ObjectType + { + ObjType, + GroupType + }; + + //! Object name + std::string m_strObjName; + //! Transformation matrix, stored in OpenGL format + aiMatrix4x4 m_Transformation; + //! All sub-objects referenced by this object + std::vector<Object*> m_SubObjects; + /// Assigned meshes + std::vector<unsigned int> m_Meshes; + + //! \brief Default constructor + Object() : + m_strObjName("") + { + // empty + } + + //! \brief Destructor + ~Object() + { + for (std::vector<Object*>::iterator it = m_SubObjects.begin(); + it != m_SubObjects.end(); ++it) + { + delete *it; + } + m_SubObjects.clear(); + } }; // ------------------------------------------------------------------------------------------------ -//! \struct Material -//! \brief Data structure to store all material specific data +//! \struct Material +//! \brief Data structure to store all material specific data struct Material { - //! Name of material description - aiString MaterialName; - - //! Texture names - aiString texture; - aiString textureSpecular; - aiString textureAmbient; - aiString textureEmissive; - aiString textureBump; - aiString textureNormal; - aiString textureSpecularity; - aiString textureOpacity; - aiString textureDisp; - enum TextureType - { - TextureDiffuseType = 0, - TextureSpecularType, - TextureAmbientType, - TextureEmissiveType, - TextureBumpType, - TextureNormalType, - TextureSpecularityType, - TextureOpacityType, - TextureDispType, - TextureTypeCount - }; - bool clamp[TextureTypeCount]; - - //! Ambient color - aiColor3D ambient; - //! Diffuse color - aiColor3D diffuse; - //! Specular color - aiColor3D specular; - //! Emissive color - aiColor3D emissive; - //! Alpha value - float alpha; - //! Shineness factor - float shineness; - //! Illumination model - int illumination_model; - //! Index of refraction - float ior; - - //! Constructor - Material() - : diffuse (0.6f,0.6f,0.6f) - , alpha (1.f) - , shineness (0.0f) - , illumination_model (1) - , ior (1.f) - { - // empty - for (size_t i = 0; i < TextureTypeCount; ++i) - { - clamp[i] = false; - } - } - - // Destructor - ~Material() - { - // empty - } + //! Name of material description + aiString MaterialName; + + //! Texture names + aiString texture; + aiString textureSpecular; + aiString textureAmbient; + aiString textureEmissive; + aiString textureBump; + aiString textureNormal; + aiString textureReflection[6]; + aiString textureSpecularity; + aiString textureOpacity; + aiString textureDisp; + enum TextureType + { + TextureDiffuseType = 0, + TextureSpecularType, + TextureAmbientType, + TextureEmissiveType, + TextureBumpType, + TextureNormalType, + TextureReflectionSphereType, + TextureReflectionCubeTopType, + TextureReflectionCubeBottomType, + TextureReflectionCubeFrontType, + TextureReflectionCubeBackType, + TextureReflectionCubeLeftType, + TextureReflectionCubeRightType, + TextureSpecularityType, + TextureOpacityType, + TextureDispType, + TextureTypeCount + }; + bool clamp[TextureTypeCount]; + + //! Ambient color + aiColor3D ambient; + //! Diffuse color + aiColor3D diffuse; + //! Specular color + aiColor3D specular; + //! Emissive color + aiColor3D emissive; + //! Alpha value + float alpha; + //! Shineness factor + float shineness; + //! Illumination model + int illumination_model; + //! Index of refraction + float ior; + + //! Constructor + Material() + : diffuse (0.6f,0.6f,0.6f) + , alpha (1.f) + , shineness (0.0f) + , illumination_model (1) + , ior (1.f) + { + // empty + for (size_t i = 0; i < TextureTypeCount; ++i) + { + clamp[i] = false; + } + } + + // Destructor + ~Material() + { + // empty + } }; // ------------------------------------------------------------------------------------------------ -//! \struct Mesh -//! \brief Data structure to store a mesh -struct Mesh -{ - static const unsigned int NoMaterial = ~0u; - - /// Array with pointer to all stored faces - std::vector<Face*> m_Faces; - /// Assigned material - Material *m_pMaterial; - /// Number of stored indices. - unsigned int m_uiNumIndices; - /// Number of UV - unsigned int m_uiUVCoordinates[ AI_MAX_NUMBER_OF_TEXTURECOORDS ]; - /// Material index. - unsigned int m_uiMaterialIndex; - /// True, if normals are stored. - bool m_hasNormals; - /// Constructor - Mesh() : - m_pMaterial(NULL), - m_uiNumIndices(0), - m_uiMaterialIndex( NoMaterial ), - m_hasNormals(false) - { - memset(m_uiUVCoordinates, 0, sizeof( unsigned int ) * AI_MAX_NUMBER_OF_TEXTURECOORDS); - } - - /// Destructor - ~Mesh() - { - for (std::vector<Face*>::iterator it = m_Faces.begin(); - it != m_Faces.end(); ++it) - { - delete *it; - } - } +//! \struct Mesh +//! \brief Data structure to store a mesh +struct Mesh { + static const unsigned int NoMaterial = ~0u; + /// The name for the mesh + std::string m_name; + /// Array with pointer to all stored faces + std::vector<Face*> m_Faces; + /// Assigned material + Material *m_pMaterial; + /// Number of stored indices. + unsigned int m_uiNumIndices; + /// Number of UV + unsigned int m_uiUVCoordinates[ AI_MAX_NUMBER_OF_TEXTURECOORDS ]; + /// Material index. + unsigned int m_uiMaterialIndex; + /// True, if normals are stored. + bool m_hasNormals; + /// True, if vertex colors are stored. + bool m_hasVertexColors; + + /// Constructor + explicit Mesh( const std::string &name ) + : m_name( name ) + , m_pMaterial(NULL) + , m_uiNumIndices(0) + , m_uiMaterialIndex( NoMaterial ) + , m_hasNormals(false) { + memset(m_uiUVCoordinates, 0, sizeof( unsigned int ) * AI_MAX_NUMBER_OF_TEXTURECOORDS); + } + + /// Destructor + ~Mesh() + { + for (std::vector<Face*>::iterator it = m_Faces.begin(); + it != m_Faces.end(); ++it) + { + delete *it; + } + } }; // ------------------------------------------------------------------------------------------------ -//! \struct Model -//! \brief Data structure to store all obj-specific model datas +//! \struct Model +//! \brief Data structure to store all obj-specific model datas struct Model { - typedef std::map<std::string, std::vector<unsigned int>* > GroupMap; - typedef std::map<std::string, std::vector<unsigned int>* >::iterator GroupMapIt; - typedef std::map<std::string, std::vector<unsigned int>* >::const_iterator ConstGroupMapIt; - - //! Model name - std::string m_ModelName; - //! List ob assigned objects - std::vector<Object*> m_Objects; - //! Pointer to current object - ObjFile::Object *m_pCurrent; - //! Pointer to current material - ObjFile::Material *m_pCurrentMaterial; - //! Pointer to default material - ObjFile::Material *m_pDefaultMaterial; - //! Vector with all generated materials - std::vector<std::string> m_MaterialLib; - //! Vector with all generated group - std::vector<std::string> m_GroupLib; - //! Vector with all generated vertices - std::vector<aiVector3D> m_Vertices; - //! vector with all generated normals - std::vector<aiVector3D> m_Normals; - //! Group map - GroupMap m_Groups; - //! Group to face id assignment - std::vector<unsigned int> *m_pGroupFaceIDs; - //! Active group - std::string m_strActiveGroup; - //! Vector with generated texture coordinates - std::vector<aiVector3D> m_TextureCoord; - //! Current mesh instance - Mesh *m_pCurrentMesh; - //! Vector with stored meshes - std::vector<Mesh*> m_Meshes; - //! Material map - std::map<std::string, Material*> m_MaterialMap; - - //! \brief The default class constructor - Model() : - m_ModelName(""), - m_pCurrent(NULL), - m_pCurrentMaterial(NULL), - m_pDefaultMaterial(NULL), + typedef std::map<std::string, std::vector<unsigned int>* > GroupMap; + typedef std::map<std::string, std::vector<unsigned int>* >::iterator GroupMapIt; + typedef std::map<std::string, std::vector<unsigned int>* >::const_iterator ConstGroupMapIt; + + //! Model name + std::string m_ModelName; + //! List ob assigned objects + std::vector<Object*> m_Objects; + //! Pointer to current object + ObjFile::Object *m_pCurrent; + //! Pointer to current material + ObjFile::Material *m_pCurrentMaterial; + //! Pointer to default material + ObjFile::Material *m_pDefaultMaterial; + //! Vector with all generated materials + std::vector<std::string> m_MaterialLib; + //! Vector with all generated group + std::vector<std::string> m_GroupLib; + //! Vector with all generated vertices + std::vector<aiVector3D> m_Vertices; + //! vector with all generated normals + std::vector<aiVector3D> m_Normals; + //! vector with all vertex colors + std::vector<aiVector3D> m_VertexColors; + //! Group map + GroupMap m_Groups; + //! Group to face id assignment + std::vector<unsigned int> *m_pGroupFaceIDs; + //! Active group + std::string m_strActiveGroup; + //! Vector with generated texture coordinates + std::vector<aiVector3D> m_TextureCoord; + //! Current mesh instance + Mesh *m_pCurrentMesh; + //! Vector with stored meshes + std::vector<Mesh*> m_Meshes; + //! Material map + std::map<std::string, Material*> m_MaterialMap; + + //! \brief The default class constructor + Model() : + m_ModelName(""), + m_pCurrent(NULL), + m_pCurrentMaterial(NULL), + m_pDefaultMaterial(NULL), m_pGroupFaceIDs(NULL), - m_strActiveGroup(""), - m_pCurrentMesh(NULL) - { - // empty - } - - //! \brief The class destructor - ~Model() - { - // Clear all stored object instances - for (std::vector<Object*>::iterator it = m_Objects.begin(); - it != m_Objects.end(); ++it) { - delete *it; - } - m_Objects.clear(); - - // Clear all stored mesh instances - for (std::vector<Mesh*>::iterator it = m_Meshes.begin(); - it != m_Meshes.end(); ++it) { - delete *it; - } - m_Meshes.clear(); - - for(GroupMapIt it = m_Groups.begin(); it != m_Groups.end(); ++it) { - delete it->second; - } - m_Groups.clear(); - - for ( std::map<std::string, Material*>::iterator it = m_MaterialMap.begin(); it != m_MaterialMap.end(); ++it ) { - delete it->second; - } - } + m_strActiveGroup(""), + m_pCurrentMesh(NULL) + { + // empty + } + + //! \brief The class destructor + ~Model() + { + // Clear all stored object instances + for (std::vector<Object*>::iterator it = m_Objects.begin(); + it != m_Objects.end(); ++it) { + delete *it; + } + m_Objects.clear(); + + // Clear all stored mesh instances + for (std::vector<Mesh*>::iterator it = m_Meshes.begin(); + it != m_Meshes.end(); ++it) { + delete *it; + } + m_Meshes.clear(); + + for(GroupMapIt it = m_Groups.begin(); it != m_Groups.end(); ++it) { + delete it->second; + } + m_Groups.clear(); + + for ( std::map<std::string, Material*>::iterator it = m_MaterialMap.begin(); it != m_MaterialMap.end(); ++it ) { + delete it->second; + } + } }; // ------------------------------------------------------------------------------------------------ |