| /* |
| Open Asset Import Library (assimp) |
| ---------------------------------------------------------------------- |
| |
| Copyright (c) 2006-2017, 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 MDC files |
| |
| ********************************************************************** |
| File format specification: |
| http://themdcfile.planetwolfenstein.gamespy.com/MDC_File_Format.pdf |
| ********************************************************************** |
| |
| */ |
| #ifndef AI_MDCFILEHELPER_H_INC |
| #define AI_MDCFILEHELPER_H_INC |
| |
| #include <assimp/types.h> |
| #include <assimp/mesh.h> |
| #include <assimp/anim.h> |
| |
| #include <assimp/Compiler/pushpack1.h> |
| #include <stdint.h> |
| |
| namespace Assimp { |
| namespace MDC { |
| |
| |
| // to make it easier for us, we test the magic word against both "endianesses" |
| #define AI_MDC_MAGIC_NUMBER_BE AI_MAKE_MAGIC("CPDI") |
| #define AI_MDC_MAGIC_NUMBER_LE AI_MAKE_MAGIC("IDPC") |
| |
| // common limitations |
| #define AI_MDC_VERSION 2 |
| #define AI_MDC_MAXQPATH 64 |
| #define AI_MDC_MAX_BONES 128 |
| |
| #define AI_MDC_CVERT_BIAS 127.0f |
| #define AI_MDC_DELTA_SCALING 4.0f |
| #define AI_MDC_BASE_SCALING (1.0f / 64.0f) |
| |
| |
| // --------------------------------------------------------------------------- |
| /** \brief Data structure for a MDC file's main header |
| */ |
| struct Header |
| { |
| uint32_t ulIdent ; |
| uint32_t ulVersion ; |
| char ucName [ AI_MDC_MAXQPATH ] ; |
| uint32_t ulFlags ; |
| uint32_t ulNumFrames ; |
| uint32_t ulNumTags ; |
| uint32_t ulNumSurfaces ; |
| uint32_t ulNumSkins ; |
| uint32_t ulOffsetBorderFrames ; |
| uint32_t ulOffsetTagNames ; |
| uint32_t ulOffsetTagFrames ; |
| uint32_t ulOffsetSurfaces ; |
| uint32_t ulOffsetEnd ; |
| } PACK_STRUCT ; |
| |
| |
| // --------------------------------------------------------------------------- |
| /** \brief Data structure for a MDC file's surface header |
| */ |
| struct Surface |
| { |
| uint32_t ulIdent ; |
| char ucName [ AI_MDC_MAXQPATH ] ; |
| uint32_t ulFlags ; |
| uint32_t ulNumCompFrames ; |
| uint32_t ulNumBaseFrames ; |
| uint32_t ulNumShaders ; |
| uint32_t ulNumVertices ; |
| uint32_t ulNumTriangles ; |
| uint32_t ulOffsetTriangles ; |
| uint32_t ulOffsetShaders ; |
| uint32_t ulOffsetTexCoords ; |
| uint32_t ulOffsetBaseVerts ; |
| uint32_t ulOffsetCompVerts ; |
| uint32_t ulOffsetFrameBaseFrames ; |
| uint32_t ulOffsetFrameCompFrames ; |
| uint32_t ulOffsetEnd; |
| Surface() |
| : ulIdent(), |
| ulFlags(), |
| ulNumCompFrames(), |
| ulNumBaseFrames(), |
| ulNumShaders(), |
| ulNumVertices(), |
| ulNumTriangles(), |
| ulOffsetTriangles(), |
| ulOffsetShaders(), |
| ulOffsetTexCoords(), |
| ulOffsetBaseVerts(), |
| ulOffsetCompVerts(), |
| ulOffsetFrameBaseFrames(), |
| ulOffsetFrameCompFrames(), |
| ulOffsetEnd() |
| { |
| ucName[AI_MDC_MAXQPATH-1] = '\0'; |
| } |
| } PACK_STRUCT; |
| |
| // --------------------------------------------------------------------------- |
| /** \brief Data structure for a MDC frame |
| */ |
| struct Frame |
| { |
| //! bounding box minimum coords |
| aiVector3D bboxMin ; |
| |
| //! bounding box maximum coords |
| aiVector3D bboxMax ; |
| |
| //! local origin of the frame |
| aiVector3D localOrigin ; |
| |
| //! radius of the BB |
| float radius ; |
| |
| //! Name of the frame |
| char name [ 16 ] ; |
| } /*PACK_STRUCT*/; |
| |
| // --------------------------------------------------------------------------- |
| /** \brief Data structure for a MDC triangle |
| */ |
| struct Triangle |
| { |
| uint32_t aiIndices[3]; |
| } PACK_STRUCT; |
| |
| // --------------------------------------------------------------------------- |
| /** \brief Data structure for a MDC texture coordinate |
| */ |
| struct TexturCoord |
| { |
| float u,v; |
| } PACK_STRUCT; |
| |
| // --------------------------------------------------------------------------- |
| /** \brief Data structure for a MDC base vertex |
| */ |
| struct BaseVertex |
| { |
| int16_t x,y,z; |
| uint16_t normal; |
| } PACK_STRUCT; |
| |
| // --------------------------------------------------------------------------- |
| /** \brief Data structure for a MDC compressed vertex |
| */ |
| struct CompressedVertex |
| { |
| uint8_t xd,yd,zd,nd; |
| } PACK_STRUCT; |
| |
| |
| // --------------------------------------------------------------------------- |
| /** \brief Data structure for a MDC shader |
| */ |
| struct Shader |
| { |
| char ucName [ AI_MDC_MAXQPATH ] ; |
| uint32_t ulPath; |
| |
| } PACK_STRUCT; |
| |
| #include <assimp/Compiler/poppack1.h> |
| |
| |
| // --------------------------------------------------------------------------- |
| /** Build a floating point vertex from the compressed data in MDC files |
| */ |
| void BuildVertex(const Frame& frame, |
| const BaseVertex& bvert, |
| const CompressedVertex& cvert, |
| aiVector3D& vXYZOut, |
| aiVector3D& vNorOut); |
| }} |
| |
| #endif // !! AI_MDCFILEHELPER_H_INC |