| /* |
| 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 MD2FileData.h |
| * @brief Defines helper data structures for importing MD2 files |
| * http://linux.ucla.edu/~phaethon/q3/formats/md2-schoenblum.html |
| */ |
| #ifndef AI_MD2FILEHELPER_H_INC |
| #define AI_MD2FILEHELPER_H_INC |
| |
| #include <assimp/types.h> |
| #include <stdint.h> |
| |
| #include <assimp/Compiler/pushpack1.h> |
| |
| namespace Assimp { |
| namespace MD2 { |
| |
| // to make it easier for us, we test the magic word against both "endianesses" |
| #define AI_MD2_MAGIC_NUMBER_BE AI_MAKE_MAGIC("IDP2") |
| #define AI_MD2_MAGIC_NUMBER_LE AI_MAKE_MAGIC("2PDI") |
| |
| // common limitations |
| #define AI_MD2_VERSION 15 |
| #define AI_MD2_MAXQPATH 64 |
| #define AI_MD2_MAX_FRAMES 512 |
| #define AI_MD2_MAX_SKINS 32 |
| #define AI_MD2_MAX_VERTS 2048 |
| #define AI_MD2_MAX_TRIANGLES 4096 |
| |
| // --------------------------------------------------------------------------- |
| /** \brief Data structure for the MD2 main header |
| */ |
| struct Header |
| { |
| uint32_t magic; |
| uint32_t version; |
| uint32_t skinWidth; |
| uint32_t skinHeight; |
| uint32_t frameSize; |
| uint32_t numSkins; |
| uint32_t numVertices; |
| uint32_t numTexCoords; |
| uint32_t numTriangles; |
| uint32_t numGlCommands; |
| uint32_t numFrames; |
| uint32_t offsetSkins; |
| uint32_t offsetTexCoords; |
| uint32_t offsetTriangles; |
| uint32_t offsetFrames; |
| uint32_t offsetGlCommands; |
| uint32_t offsetEnd; |
| |
| } PACK_STRUCT; |
| |
| // --------------------------------------------------------------------------- |
| /** \brief Data structure for a MD2 OpenGl draw command |
| */ |
| struct GLCommand |
| { |
| float s, t; |
| uint32_t vertexIndex; |
| } PACK_STRUCT; |
| |
| // --------------------------------------------------------------------------- |
| /** \brief Data structure for a MD2 triangle |
| */ |
| struct Triangle |
| { |
| uint16_t vertexIndices[3]; |
| uint16_t textureIndices[3]; |
| } PACK_STRUCT; |
| |
| // --------------------------------------------------------------------------- |
| /** \brief Data structure for a MD2 vertex |
| */ |
| struct Vertex |
| { |
| uint8_t vertex[3]; |
| uint8_t lightNormalIndex; |
| } PACK_STRUCT; |
| |
| // --------------------------------------------------------------------------- |
| /** \brief Data structure for a MD2 frame |
| */ |
| struct Frame |
| { |
| float scale[3]; |
| float translate[3]; |
| char name[16]; |
| Vertex vertices[1]; |
| } PACK_STRUCT; |
| |
| // --------------------------------------------------------------------------- |
| /** \brief Data structure for a MD2 texture coordinate |
| */ |
| struct TexCoord |
| { |
| uint16_t s; |
| uint16_t t; |
| } PACK_STRUCT; |
| |
| // --------------------------------------------------------------------------- |
| /** \brief Data structure for a MD2 skin |
| */ |
| struct Skin |
| { |
| char name[AI_MD2_MAXQPATH]; /* texture file name */ |
| } PACK_STRUCT; |
| |
| #include <assimp/Compiler/poppack1.h> |
| |
| |
| // --------------------------------------------------------------------------- |
| //! Lookup a normal vector from Quake's normal lookup table |
| //! \param index Input index (0-161) |
| //! \param vOut Receives the output normal |
| void LookupNormalIndex(uint8_t index,aiVector3D& vOut); |
| |
| |
| } |
| } |
| |
| #endif // !! include guard |
| |