diff options
Diffstat (limited to 'libs/assimp/code/AssetLib/3DS/3DSLoader.h')
| -rw-r--r-- | libs/assimp/code/AssetLib/3DS/3DSLoader.h | 289 | 
1 files changed, 289 insertions, 0 deletions
diff --git a/libs/assimp/code/AssetLib/3DS/3DSLoader.h b/libs/assimp/code/AssetLib/3DS/3DSLoader.h new file mode 100644 index 0000000..f47fcfe --- /dev/null +++ b/libs/assimp/code/AssetLib/3DS/3DSLoader.h @@ -0,0 +1,289 @@ + +/* +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  3DSLoader.h + *  @brief 3DS File format loader + */ +#ifndef AI_3DSIMPORTER_H_INC +#define AI_3DSIMPORTER_H_INC +#ifndef ASSIMP_BUILD_NO_3DS_IMPORTER + +#include <assimp/BaseImporter.h> +#include <assimp/types.h> + + +#include "3DSHelper.h" +#include <assimp/StreamReader.h> + +struct aiNode; + +namespace Assimp    { + + +using namespace D3DS; + +// --------------------------------------------------------------------------------- +/** Importer class for 3D Studio r3 and r4 3DS files + */ +class Discreet3DSImporter : public BaseImporter { +public: +    Discreet3DSImporter(); +    ~Discreet3DSImporter(); + +    // ------------------------------------------------------------------- +    /** Returns whether the class can handle the format of the given file. +     * See BaseImporter::CanRead() for details. +     */ +    bool CanRead( const std::string& pFile, IOSystem* pIOHandler, +        bool checkSig) const override; + +    // ------------------------------------------------------------------- +    /** Called prior to ReadFile(). +     * The function is a request to the importer to update its configuration +     * basing on the Importer's configuration property list. +     */ +    void SetupProperties(const Importer* pImp) override; + +protected: + +    // ------------------------------------------------------------------- +    /** Return importer meta information. +     * See #BaseImporter::GetInfo for the details +     */ +    const aiImporterDesc* GetInfo () const override; + +    // ------------------------------------------------------------------- +    /** Imports the given file into the given scene structure. +     * See BaseImporter::InternReadFile() for details +     */ +    void InternReadFile( const std::string& pFile, aiScene* pScene, +        IOSystem* pIOHandler) override; + +    // ------------------------------------------------------------------- +    /** Converts a temporary material to the outer representation +     */ +    void ConvertMaterial(D3DS::Material& p_cMat, +        aiMaterial& p_pcOut); + +    // ------------------------------------------------------------------- +    /** Read a chunk +     * +     *  @param pcOut Receives the current chunk +     */ +    void ReadChunk(Discreet3DS::Chunk* pcOut); + +    // ------------------------------------------------------------------- +    /** Parse a percentage chunk. mCurrent will point to the next +    * chunk behind afterwards. If no percentage chunk is found +    * QNAN is returned. +    */ +    ai_real ParsePercentageChunk(); + +    // ------------------------------------------------------------------- +    /** Parse a color chunk. mCurrent will point to the next +    * chunk behind afterwards. If no color chunk is found +    * QNAN is returned in all members. +    */ +    void ParseColorChunk(aiColor3D* p_pcOut, +        bool p_bAcceptPercent = true); + + +    // ------------------------------------------------------------------- +    /** Skip a chunk in the file +    */ +    void SkipChunk(); + +    // ------------------------------------------------------------------- +    /** Generate the nodegraph +    */ +    void GenerateNodeGraph(aiScene* pcOut); + +    // ------------------------------------------------------------------- +    /** Parse a main top-level chunk in the file +    */ +    void ParseMainChunk(); + +    // ------------------------------------------------------------------- +    /** Parse a top-level chunk in the file +    */ +    void ParseChunk(const char* name, unsigned int num); + +    // ------------------------------------------------------------------- +    /** Parse a top-level editor chunk in the file +    */ +    void ParseEditorChunk(); + +    // ------------------------------------------------------------------- +    /** Parse a top-level object chunk in the file +    */ +    void ParseObjectChunk(); + +    // ------------------------------------------------------------------- +    /** Parse a material chunk in the file +    */ +    void ParseMaterialChunk(); + +    // ------------------------------------------------------------------- +    /** Parse a mesh chunk in the file +    */ +    void ParseMeshChunk(); + +    // ------------------------------------------------------------------- +    /** Parse a light chunk in the file +    */ +    void ParseLightChunk(); + +    // ------------------------------------------------------------------- +    /** Parse a camera chunk in the file +    */ +    void ParseCameraChunk(); + +    // ------------------------------------------------------------------- +    /** Parse a face list chunk in the file +    */ +    void ParseFaceChunk(); + +    // ------------------------------------------------------------------- +    /** Parse a keyframe chunk in the file +    */ +    void ParseKeyframeChunk(); + +    // ------------------------------------------------------------------- +    /** Parse a hierarchy chunk in the file +    */ +    void ParseHierarchyChunk(uint16_t parent); + +    // ------------------------------------------------------------------- +    /** Parse a texture chunk in the file +    */ +    void ParseTextureChunk(D3DS::Texture* pcOut); + +    // ------------------------------------------------------------------- +    /** Convert the meshes in the file +    */ +    void ConvertMeshes(aiScene* pcOut); + +    // ------------------------------------------------------------------- +    /** Replace the default material in the scene +    */ +    void ReplaceDefaultMaterial(); + +    bool ContainsTextures(unsigned int i) const { +        return !mScene->mMaterials[i].sTexDiffuse.mMapName.empty() || +               !mScene->mMaterials[i].sTexBump.mMapName.empty() || +               !mScene->mMaterials[i].sTexOpacity.mMapName.empty() || +               !mScene->mMaterials[i].sTexEmissive.mMapName.empty() || +               !mScene->mMaterials[i].sTexSpecular.mMapName.empty() || +               !mScene->mMaterials[i].sTexShininess.mMapName.empty() ; +    } + +    // ------------------------------------------------------------------- +    /** Convert the whole scene +    */ +    void ConvertScene(aiScene* pcOut); + +    // ------------------------------------------------------------------- +    /** generate unique vertices for a mesh +    */ +    void MakeUnique(D3DS::Mesh& sMesh); + +    // ------------------------------------------------------------------- +    /** Add a node to the node graph +    */ +    void AddNodeToGraph(aiScene* pcSOut,aiNode* pcOut,D3DS::Node* pcIn, +        aiMatrix4x4& absTrafo); + +    // ------------------------------------------------------------------- +    /** Search for a node in the graph. +    * Called recursively +    */ +    void InverseNodeSearch(D3DS::Node* pcNode,D3DS::Node* pcCurrent); + +    // ------------------------------------------------------------------- +    /** Apply the master scaling factor to the mesh +    */ +    void ApplyMasterScale(aiScene* pScene); + +    // ------------------------------------------------------------------- +    /** Clamp all indices in the file to a valid range +    */ +    void CheckIndices(D3DS::Mesh& sMesh); + +    // ------------------------------------------------------------------- +    /** Skip the TCB info in a track key +    */ +    void SkipTCBInfo(); + +protected: + +    /** Stream to read from */ +    StreamReaderLE* stream; + +    /** Last touched node index */ +    short mLastNodeIndex; + +    /** Current node, root node */ +    D3DS::Node* mCurrentNode, *mRootNode; + +    /** Scene under construction */ +    D3DS::Scene* mScene; + +    /** Ambient base color of the scene */ +    aiColor3D mClrAmbient; + +    /** Master scaling factor of the scene */ +    ai_real mMasterScale; + +    /** Path to the background image of the scene */ +    std::string mBackgroundImage; +    bool bHasBG; + +    /** true if PRJ file */ +    bool bIsPrj; +}; + +} // end of namespace Assimp + +#endif // !! ASSIMP_BUILD_NO_3DS_IMPORTER + +#endif // AI_3DSIMPORTER_H_INC  | 
