123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638 |
- /*
- Open Asset Import Library (assimp)
- ----------------------------------------------------------------------
- Copyright (c) 2006-2020, 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
|