diff options
Diffstat (limited to 'libs/assimp/code/AssetLib/LWO/LWOFileData.h')
-rw-r--r-- | libs/assimp/code/AssetLib/LWO/LWOFileData.h | 638 |
1 files changed, 0 insertions, 638 deletions
diff --git a/libs/assimp/code/AssetLib/LWO/LWOFileData.h b/libs/assimp/code/AssetLib/LWO/LWOFileData.h deleted file mode 100644 index f477f58..0000000 --- a/libs/assimp/code/AssetLib/LWO/LWOFileData.h +++ /dev/null @@ -1,638 +0,0 @@ -/* -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 LWOFileData.h - * @brief Defines chunk constants used by the LWO file format - -The chunks are taken from the official LightWave SDK headers. - -*/ -#ifndef AI_LWO_FILEDATA_INCLUDED -#define AI_LWO_FILEDATA_INCLUDED - -// STL headers -#include <list> -#include <vector> - -// public ASSIMP headers -#include <assimp/mesh.h> - -// internal headers -#include "AssetLib/LWO/LWOAnimation.h" -#include "Common/IFF.h" - -namespace Assimp { -namespace LWO { - -#define AI_LWO_FOURCC_LWOB AI_IFF_FOURCC('L', 'W', 'O', 'B') -#define AI_LWO_FOURCC_LWO2 AI_IFF_FOURCC('L', 'W', 'O', '2') -#define AI_LWO_FOURCC_LXOB AI_IFF_FOURCC('L', 'X', 'O', 'B') - -// chunks specific to the LWOB format -#define AI_LWO_SRFS AI_IFF_FOURCC('S', 'R', 'F', 'S') -#define AI_LWO_FLAG AI_IFF_FOURCC('F', 'L', 'A', 'G') -#define AI_LWO_VLUM AI_IFF_FOURCC('V', 'L', 'U', 'M') -#define AI_LWO_VDIF AI_IFF_FOURCC('V', 'D', 'I', 'F') -#define AI_LWO_VSPC AI_IFF_FOURCC('V', 'S', 'P', 'C') -#define AI_LWO_RFLT AI_IFF_FOURCC('R', 'F', 'L', 'T') -#define AI_LWO_BTEX AI_IFF_FOURCC('B', 'T', 'E', 'X') -#define AI_LWO_CTEX AI_IFF_FOURCC('C', 'T', 'E', 'X') -#define AI_LWO_DTEX AI_IFF_FOURCC('D', 'T', 'E', 'X') -#define AI_LWO_LTEX AI_IFF_FOURCC('L', 'T', 'E', 'X') -#define AI_LWO_RTEX AI_IFF_FOURCC('R', 'T', 'E', 'X') -#define AI_LWO_STEX AI_IFF_FOURCC('S', 'T', 'E', 'X') -#define AI_LWO_TTEX AI_IFF_FOURCC('T', 'T', 'E', 'X') -#define AI_LWO_TFLG AI_IFF_FOURCC('T', 'F', 'L', 'G') -#define AI_LWO_TSIZ AI_IFF_FOURCC('T', 'S', 'I', 'Z') -#define AI_LWO_TCTR AI_IFF_FOURCC('T', 'C', 'T', 'R') -#define AI_LWO_TFAL AI_IFF_FOURCC('T', 'F', 'A', 'L') -#define AI_LWO_TVEL AI_IFF_FOURCC('T', 'V', 'E', 'L') -#define AI_LWO_TCLR AI_IFF_FOURCC('T', 'C', 'L', 'R') -#define AI_LWO_TVAL AI_IFF_FOURCC('T', 'V', 'A', 'L') -#define AI_LWO_TAMP AI_IFF_FOURCC('T', 'A', 'M', 'P') -#define AI_LWO_TIMG AI_IFF_FOURCC('T', 'I', 'M', 'G') -#define AI_LWO_TAAS AI_IFF_FOURCC('T', 'A', 'A', 'S') -#define AI_LWO_TREF AI_IFF_FOURCC('T', 'R', 'E', 'F') -#define AI_LWO_TOPC AI_IFF_FOURCC('T', 'O', 'P', 'C') -#define AI_LWO_SDAT AI_IFF_FOURCC('S', 'D', 'A', 'T') -#define AI_LWO_TFP0 AI_IFF_FOURCC('T', 'F', 'P', '0') -#define AI_LWO_TFP1 AI_IFF_FOURCC('T', 'F', 'P', '1') - -/* top-level chunks */ -#define AI_LWO_LAYR AI_IFF_FOURCC('L', 'A', 'Y', 'R') -#define AI_LWO_TAGS AI_IFF_FOURCC('T', 'A', 'G', 'S') -#define AI_LWO_PNTS AI_IFF_FOURCC('P', 'N', 'T', 'S') -#define AI_LWO_BBOX AI_IFF_FOURCC('B', 'B', 'O', 'X') -#define AI_LWO_VMAP AI_IFF_FOURCC('V', 'M', 'A', 'P') -#define AI_LWO_VMAD AI_IFF_FOURCC('V', 'M', 'A', 'D') -#define AI_LWO_POLS AI_IFF_FOURCC('P', 'O', 'L', 'S') -#define AI_LWO_PTAG AI_IFF_FOURCC('P', 'T', 'A', 'G') -#define AI_LWO_ENVL AI_IFF_FOURCC('E', 'N', 'V', 'L') -#define AI_LWO_CLIP AI_IFF_FOURCC('C', 'L', 'I', 'P') -#define AI_LWO_SURF AI_IFF_FOURCC('S', 'U', 'R', 'F') -#define AI_LWO_DESC AI_IFF_FOURCC('D', 'E', 'S', 'C') -#define AI_LWO_TEXT AI_IFF_FOURCC('T', 'E', 'X', 'T') -#define AI_LWO_ICON AI_IFF_FOURCC('I', 'C', 'O', 'N') - -/* polygon types */ -#define AI_LWO_FACE AI_IFF_FOURCC('F', 'A', 'C', 'E') -#define AI_LWO_CURV AI_IFF_FOURCC('C', 'U', 'R', 'V') -#define AI_LWO_PTCH AI_IFF_FOURCC('P', 'T', 'C', 'H') -#define AI_LWO_MBAL AI_IFF_FOURCC('M', 'B', 'A', 'L') -#define AI_LWO_BONE AI_IFF_FOURCC('B', 'O', 'N', 'E') -#define AI_LWO_SUBD AI_IFF_FOURCC('S', 'U', 'B', 'D') - -/* polygon tags */ -#define AI_LWO_SURF AI_IFF_FOURCC('S', 'U', 'R', 'F') -#define AI_LWO_PART AI_IFF_FOURCC('P', 'A', 'R', 'T') -#define AI_LWO_SMGP AI_IFF_FOURCC('S', 'M', 'G', 'P') - -/* envelopes */ -#define AI_LWO_PRE AI_IFF_FOURCC('P', 'R', 'E', ' ') -#define AI_LWO_POST AI_IFF_FOURCC('P', 'O', 'S', 'T') -#define AI_LWO_KEY AI_IFF_FOURCC('K', 'E', 'Y', ' ') -#define AI_LWO_SPAN AI_IFF_FOURCC('S', 'P', 'A', 'N') -#define AI_LWO_TCB AI_IFF_FOURCC('T', 'C', 'B', ' ') -#define AI_LWO_HERM AI_IFF_FOURCC('H', 'E', 'R', 'M') -#define AI_LWO_BEZI AI_IFF_FOURCC('B', 'E', 'Z', 'I') -#define AI_LWO_BEZ2 AI_IFF_FOURCC('B', 'E', 'Z', '2') -#define AI_LWO_LINE AI_IFF_FOURCC('L', 'I', 'N', 'E') -#define AI_LWO_STEP AI_IFF_FOURCC('S', 'T', 'E', 'P') - -/* clips */ -#define AI_LWO_STIL AI_IFF_FOURCC('S', 'T', 'I', 'L') -#define AI_LWO_ISEQ AI_IFF_FOURCC('I', 'S', 'E', 'Q') -#define AI_LWO_ANIM AI_IFF_FOURCC('A', 'N', 'I', 'M') -#define AI_LWO_XREF AI_IFF_FOURCC('X', 'R', 'E', 'F') -#define AI_LWO_STCC AI_IFF_FOURCC('S', 'T', 'C', 'C') -#define AI_LWO_TIME AI_IFF_FOURCC('T', 'I', 'M', 'E') -#define AI_LWO_CONT AI_IFF_FOURCC('C', 'O', 'N', 'T') -#define AI_LWO_BRIT AI_IFF_FOURCC('B', 'R', 'I', 'T') -#define AI_LWO_SATR AI_IFF_FOURCC('S', 'A', 'T', 'R') -#define AI_LWO_HUE AI_IFF_FOURCC('H', 'U', 'E', ' ') -#define AI_LWO_GAMM AI_IFF_FOURCC('G', 'A', 'M', 'M') -#define AI_LWO_NEGA AI_IFF_FOURCC('N', 'E', 'G', 'A') -#define AI_LWO_IFLT AI_IFF_FOURCC('I', 'F', 'L', 'T') -#define AI_LWO_PFLT AI_IFF_FOURCC('P', 'F', 'L', 'T') - -/* surfaces */ -#define AI_LWO_COLR AI_IFF_FOURCC('C', 'O', 'L', 'R') -#define AI_LWO_LUMI AI_IFF_FOURCC('L', 'U', 'M', 'I') -#define AI_LWO_DIFF AI_IFF_FOURCC('D', 'I', 'F', 'F') -#define AI_LWO_SPEC AI_IFF_FOURCC('S', 'P', 'E', 'C') -#define AI_LWO_GLOS AI_IFF_FOURCC('G', 'L', 'O', 'S') -#define AI_LWO_REFL AI_IFF_FOURCC('R', 'E', 'F', 'L') -#define AI_LWO_RFOP AI_IFF_FOURCC('R', 'F', 'O', 'P') -#define AI_LWO_RIMG AI_IFF_FOURCC('R', 'I', 'M', 'G') -#define AI_LWO_RSAN AI_IFF_FOURCC('R', 'S', 'A', 'N') -#define AI_LWO_TRAN AI_IFF_FOURCC('T', 'R', 'A', 'N') -#define AI_LWO_TROP AI_IFF_FOURCC('T', 'R', 'O', 'P') -#define AI_LWO_TIMG AI_IFF_FOURCC('T', 'I', 'M', 'G') -#define AI_LWO_RIND AI_IFF_FOURCC('R', 'I', 'N', 'D') -#define AI_LWO_TRNL AI_IFF_FOURCC('T', 'R', 'N', 'L') -#define AI_LWO_BUMP AI_IFF_FOURCC('B', 'U', 'M', 'P') -#define AI_LWO_SMAN AI_IFF_FOURCC('S', 'M', 'A', 'N') -#define AI_LWO_SIDE AI_IFF_FOURCC('S', 'I', 'D', 'E') -#define AI_LWO_CLRH AI_IFF_FOURCC('C', 'L', 'R', 'H') -#define AI_LWO_CLRF AI_IFF_FOURCC('C', 'L', 'R', 'F') -#define AI_LWO_ADTR AI_IFF_FOURCC('A', 'D', 'T', 'R') -#define AI_LWO_SHRP AI_IFF_FOURCC('S', 'H', 'R', 'P') -#define AI_LWO_LINE AI_IFF_FOURCC('L', 'I', 'N', 'E') -#define AI_LWO_LSIZ AI_IFF_FOURCC('L', 'S', 'I', 'Z') -#define AI_LWO_ALPH AI_IFF_FOURCC('A', 'L', 'P', 'H') -#define AI_LWO_AVAL AI_IFF_FOURCC('A', 'V', 'A', 'L') -#define AI_LWO_GVAL AI_IFF_FOURCC('G', 'V', 'A', 'L') -#define AI_LWO_BLOK AI_IFF_FOURCC('B', 'L', 'O', 'K') -#define AI_LWO_VCOL AI_IFF_FOURCC('V', 'C', 'O', 'L') - -/* texture layer */ -#define AI_LWO_TYPE AI_IFF_FOURCC('T', 'Y', 'P', 'E') -#define AI_LWO_CHAN AI_IFF_FOURCC('C', 'H', 'A', 'N') -#define AI_LWO_NAME AI_IFF_FOURCC('N', 'A', 'M', 'E') -#define AI_LWO_ENAB AI_IFF_FOURCC('E', 'N', 'A', 'B') -#define AI_LWO_OPAC AI_IFF_FOURCC('O', 'P', 'A', 'C') -#define AI_LWO_FLAG AI_IFF_FOURCC('F', 'L', 'A', 'G') -#define AI_LWO_PROJ AI_IFF_FOURCC('P', 'R', 'O', 'J') -#define AI_LWO_STCK AI_IFF_FOURCC('S', 'T', 'C', 'K') -#define AI_LWO_TAMP AI_IFF_FOURCC('T', 'A', 'M', 'P') - -/* texture coordinates */ -#define AI_LWO_TMAP AI_IFF_FOURCC('T', 'M', 'A', 'P') -#define AI_LWO_AXIS AI_IFF_FOURCC('A', 'X', 'I', 'S') -#define AI_LWO_CNTR AI_IFF_FOURCC('C', 'N', 'T', 'R') -#define AI_LWO_SIZE AI_IFF_FOURCC('S', 'I', 'Z', 'E') -#define AI_LWO_ROTA AI_IFF_FOURCC('R', 'O', 'T', 'A') -#define AI_LWO_OREF AI_IFF_FOURCC('O', 'R', 'E', 'F') -#define AI_LWO_FALL AI_IFF_FOURCC('F', 'A', 'L', 'L') -#define AI_LWO_CSYS AI_IFF_FOURCC('C', 'S', 'Y', 'S') - -/* image map */ -#define AI_LWO_IMAP AI_IFF_FOURCC('I', 'M', 'A', 'P') -#define AI_LWO_IMAG AI_IFF_FOURCC('I', 'M', 'A', 'G') -#define AI_LWO_WRAP AI_IFF_FOURCC('W', 'R', 'A', 'P') -#define AI_LWO_WRPW AI_IFF_FOURCC('W', 'R', 'P', 'W') -#define AI_LWO_WRPH AI_IFF_FOURCC('W', 'R', 'P', 'H') -#define AI_LWO_VMAP AI_IFF_FOURCC('V', 'M', 'A', 'P') -#define AI_LWO_AAST AI_IFF_FOURCC('A', 'A', 'S', 'T') -#define AI_LWO_PIXB AI_IFF_FOURCC('P', 'I', 'X', 'B') - -/* procedural */ -#define AI_LWO_PROC AI_IFF_FOURCC('P', 'R', 'O', 'C') -#define AI_LWO_COLR AI_IFF_FOURCC('C', 'O', 'L', 'R') -#define AI_LWO_VALU AI_IFF_FOURCC('V', 'A', 'L', 'U') -#define AI_LWO_FUNC AI_IFF_FOURCC('F', 'U', 'N', 'C') -#define AI_LWO_FTPS AI_IFF_FOURCC('F', 'T', 'P', 'S') -#define AI_LWO_ITPS AI_IFF_FOURCC('I', 'T', 'P', 'S') -#define AI_LWO_ETPS AI_IFF_FOURCC('E', 'T', 'P', 'S') - -/* gradient */ -#define AI_LWO_GRAD AI_IFF_FOURCC('G', 'R', 'A', 'D') -#define AI_LWO_GRST AI_IFF_FOURCC('G', 'R', 'S', 'T') -#define AI_LWO_GREN AI_IFF_FOURCC('G', 'R', 'E', 'N') -#define AI_LWO_PNAM AI_IFF_FOURCC('P', 'N', 'A', 'M') -#define AI_LWO_INAM AI_IFF_FOURCC('I', 'N', 'A', 'M') -#define AI_LWO_GRPT AI_IFF_FOURCC('G', 'R', 'P', 'T') -#define AI_LWO_FKEY AI_IFF_FOURCC('F', 'K', 'E', 'Y') -#define AI_LWO_IKEY AI_IFF_FOURCC('I', 'K', 'E', 'Y') - -/* shader */ -#define AI_LWO_SHDR AI_IFF_FOURCC('S', 'H', 'D', 'R') -#define AI_LWO_DATA AI_IFF_FOURCC('D', 'A', 'T', 'A') - -/* VMAP types */ -#define AI_LWO_TXUV AI_IFF_FOURCC('T', 'X', 'U', 'V') -#define AI_LWO_RGB AI_IFF_FOURCC('R', 'G', 'B', ' ') -#define AI_LWO_RGBA AI_IFF_FOURCC('R', 'G', 'B', 'A') -#define AI_LWO_WGHT AI_IFF_FOURCC('W', 'G', 'H', 'T') - -#define AI_LWO_MNVW AI_IFF_FOURCC('M', 'N', 'V', 'W') -#define AI_LWO_MORF AI_IFF_FOURCC('M', 'O', 'R', 'F') -#define AI_LWO_SPOT AI_IFF_FOURCC('S', 'P', 'O', 'T') -#define AI_LWO_PICK AI_IFF_FOURCC('P', 'I', 'C', 'K') - -// MODO extension - per-vertex normal vectors -#define AI_LWO_MODO_NORM AI_IFF_FOURCC('N', 'O', 'R', 'M') - -// --------------------------------------------------------------------------- -/** \brief Data structure for a face in a LWO file - * - * \note We can't use the code in SmoothingGroups.inl here - the mesh - * structures of 3DS/ASE and LWO are too different. - */ -struct Face : public aiFace { - //! Default construction - Face() AI_NO_EXCEPT - : surfaceIndex(0), - smoothGroup(0), - type(AI_LWO_FACE) { - // empty - } - - //! Construction from given type - explicit Face(uint32_t _type) : - surfaceIndex(0), smoothGroup(0), type(_type) {} - - //! Copy construction - Face(const Face &f) : - aiFace() { - *this = f; - } - - //! Zero-based index into tags chunk - unsigned int surfaceIndex; - - //! Smooth group this face is assigned to - unsigned int smoothGroup; - - //! Type of face - uint32_t type; - - //! Assignment operator - Face &operator=(const LWO::Face &f) { - aiFace::operator=(f); - surfaceIndex = f.surfaceIndex; - smoothGroup = f.smoothGroup; - type = f.type; - return *this; - } -}; - -// --------------------------------------------------------------------------- -/** \brief Base structure for all vertex map representations - */ -struct VMapEntry { - explicit VMapEntry(unsigned int _dims) : - dims(_dims) {} - - virtual ~VMapEntry() {} - - //! allocates memory for the vertex map - virtual void Allocate(unsigned int num) { - if (!rawData.empty()) - return; // return if already allocated - - const unsigned int m = num * dims; - rawData.reserve(m + (m >> 2u)); // 25% as extra storage for VMADs - rawData.resize(m, 0.f); - abAssigned.resize(num, false); - } - - std::string name; - unsigned int dims; - - std::vector<float> rawData; - std::vector<bool> abAssigned; -}; - -// --------------------------------------------------------------------------- -/** \brief Represents an extra vertex color channel - */ -struct VColorChannel : public VMapEntry { - VColorChannel() : - VMapEntry(4) {} - - //! need to overwrite this function - the alpha channel must - //! be initialized to 1.0 by default - virtual void Allocate(unsigned int num) { - if (!rawData.empty()) - return; // return if already allocated - - unsigned int m = num * dims; - rawData.reserve(m + (m >> 2u)); // 25% as extra storage for VMADs - rawData.resize(m); - - for (aiColor4D *p = (aiColor4D *)&rawData[0]; p < (aiColor4D *)&rawData[m - 1]; ++p) - p->a = 1.f; - - abAssigned.resize(num, false); - } -}; - -// --------------------------------------------------------------------------- -/** \brief Represents an extra vertex UV channel - */ -struct UVChannel : public VMapEntry { - UVChannel() : - VMapEntry(2) {} -}; - -// --------------------------------------------------------------------------- -/** \brief Represents a weight map - */ -struct WeightChannel : public VMapEntry { - WeightChannel() : - VMapEntry(1) {} -}; - -// --------------------------------------------------------------------------- -/** \brief Represents a vertex-normals channel (MODO extension) - */ -struct NormalChannel : public VMapEntry { - NormalChannel() : - VMapEntry(3) {} -}; - -// --------------------------------------------------------------------------- -/** \brief Data structure for a LWO file texture - */ -struct Texture { - // we write the enum values out here to make debugging easier ... - enum BlendType { - Normal = 0, - Subtractive = 1, - Difference = 2, - Multiply = 3, - Divide = 4, - Alpha = 5, - TextureDispl = 6, - Additive = 7 - }; - - enum MappingMode { - Planar = 0, - Cylindrical = 1, - Spherical = 2, - Cubic = 3, - FrontProjection = 4, - UV = 5 - }; - - enum Axes { - AXIS_X = 0, - AXIS_Y = 1, - AXIS_Z = 2 - }; - - enum Wrap { - RESET = 0, - REPEAT = 1, - MIRROR = 2, - EDGE = 3 - }; - - Texture() : - mClipIdx(UINT_MAX), mStrength(1.0f), type(), mUVChannelIndex("unknown"), mRealUVIndex(UINT_MAX), enabled(true), blendType(Additive), bCanUse(true), mapMode(UV), majorAxis(AXIS_X), wrapAmountH(1.0f), wrapAmountW(1.0f), wrapModeWidth(REPEAT), wrapModeHeight(REPEAT), ordinal("\x00") {} - - //! File name of the texture - std::string mFileName; - - //! Clip index - unsigned int mClipIdx; - - //! Strength of the texture - blend factor - float mStrength; - - uint32_t type; // type of the texture - - //! Name of the corresponding UV channel - std::string mUVChannelIndex; - unsigned int mRealUVIndex; - - //! is the texture enabled? - bool enabled; - - //! blend type - BlendType blendType; - - //! are we able to use the texture? - bool bCanUse; - - //! mapping mode - MappingMode mapMode; - - //! major axis for planar, cylindrical, spherical projections - Axes majorAxis; - - //! wrap amount for cylindrical and spherical projections - float wrapAmountH, wrapAmountW; - - //! wrapping mode for the texture - Wrap wrapModeWidth, wrapModeHeight; - - //! ordinal string of the texture - std::string ordinal; -}; - -// --------------------------------------------------------------------------- -/** \brief Data structure for a LWO file clip - */ -struct Clip { - enum Type { - STILL, - SEQ, - REF, - UNSUPPORTED - } type; - - Clip() : - type(UNSUPPORTED), clipRef(), idx(0), negate(false) {} - - //! path to the base texture - - std::string path; - - //! reference to another CLIP - unsigned int clipRef; - - //! index of the clip - unsigned int idx; - - //! Negate the clip? - bool negate; -}; - -// --------------------------------------------------------------------------- -/** \brief Data structure for a LWO file shader - * - * Later - */ -struct Shader { - Shader() : - ordinal("\x00"), functionName("unknown"), enabled(true) {} - - std::string ordinal; - std::string functionName; - bool enabled; -}; - -typedef std::list<Texture> TextureList; -typedef std::list<Shader> ShaderList; - -// --------------------------------------------------------------------------- -/** \brief Data structure for a LWO file surface (= material) - */ -struct Surface { - Surface() : - mColor(0.78431f, 0.78431f, 0.78431f), bDoubleSided(false), mDiffuseValue(1.f), mSpecularValue(0.f), mTransparency(0.f), mGlossiness(0.4f), mLuminosity(0.f), mColorHighlights(0.f), mMaximumSmoothAngle(0.f) // 0 == not specified, no smoothing - , - mVCMap(), - mVCMapType(AI_LWO_RGBA), - mIOR(1.f) // vakuum - , - mBumpIntensity(1.f), - mWireframe(false), - mAdditiveTransparency(0.f) {} - - //! Name of the surface - std::string mName; - - //! Color of the surface - aiColor3D mColor; - - //! true for two-sided materials - bool bDoubleSided; - - //! Various material parameters - float mDiffuseValue, mSpecularValue, mTransparency, mGlossiness, mLuminosity, mColorHighlights; - - //! Maximum angle between two adjacent triangles - //! that they can be smoothed - in degrees - float mMaximumSmoothAngle; - - //! Vertex color map to be used to color the surface - std::string mVCMap; - uint32_t mVCMapType; - - //! Names of the special shaders to be applied to the surface - ShaderList mShaders; - - //! Textures - the first entry in the list is evaluated first - TextureList mColorTextures, // color textures are added to both diffuse and specular texture stacks - mDiffuseTextures, - mSpecularTextures, - mOpacityTextures, - mBumpTextures, - mGlossinessTextures, - mReflectionTextures; - - //! Index of refraction - float mIOR; - - //! Bump intensity scaling - float mBumpIntensity; - - //! Wireframe flag - bool mWireframe; - - //! Intensity of additive blending - float mAdditiveTransparency; -}; - -// --------------------------------------------------------------------------- -#define AI_LWO_VALIDATE_CHUNK_LENGTH(length, name, size) \ - if (length < size) { \ - throw DeadlyImportError("LWO: " #name " chunk is too small"); \ - } - -// some typedefs ... to make life with loader monsters like this easier -typedef std::vector<aiVector3D> PointList; -typedef std::vector<LWO::Face> FaceList; -typedef std::vector<LWO::Surface> SurfaceList; -typedef std::vector<std::string> TagList; -typedef std::vector<unsigned int> TagMappingTable; -typedef std::vector<unsigned int> ReferrerList; -typedef std::vector<WeightChannel> WeightChannelList; -typedef std::vector<VColorChannel> VColorChannelList; -typedef std::vector<UVChannel> UVChannelList; -typedef std::vector<Clip> ClipList; -typedef std::vector<Envelope> EnvelopeList; -typedef std::vector<unsigned int> SortedRep; - -// --------------------------------------------------------------------------- -/** \brief Represents a layer in the file - */ -struct Layer { - Layer() : - mFaceIDXOfs(0), mPointIDXOfs(0), mParent(0x0), mIndex(0xffff), skip(false) {} - - /** Temporary point list from the file */ - PointList mTempPoints; - - /** Lists for every point the index of another point - that has been copied from *this* point or UINT_MAX if - no copy of the point has been made */ - ReferrerList mPointReferrers; - - /** Weight channel list from the file */ - WeightChannelList mWeightChannels; - - /** Subdivision weight channel list from the file */ - WeightChannelList mSWeightChannels; - - /** Vertex color list from the file */ - VColorChannelList mVColorChannels; - - /** UV channel list from the file */ - UVChannelList mUVChannels; - - /** Normal vector channel from the file */ - NormalChannel mNormals; - - /** Temporary face list from the file*/ - FaceList mFaces; - - /** Current face indexing offset from the beginning of the buffers*/ - unsigned int mFaceIDXOfs; - - /** Current point indexing offset from the beginning of the buffers*/ - unsigned int mPointIDXOfs; - - /** Parent index */ - uint16_t mParent; - - /** Index of the layer */ - uint16_t mIndex; - - /** Name of the layer */ - std::string mName; - - /** Pivot point of the layer */ - aiVector3D mPivot; - - /** Skip this layer? */ - bool skip; -}; - -typedef std::list<LWO::Layer> LayerList; - -} // namespace LWO -} // namespace Assimp - -#endif // !! AI_LWO_FILEDATA_INCLUDED |