| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 |
- /*
- Open Asset Import Library (ASSIMP)
- ----------------------------------------------------------------------
- Copyright (c) 2006-2008, ASSIMP Development 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 Development 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 Definition of HMP importer class
- //!
- #ifndef AI_HMPLOADER_H_INCLUDED
- #define AI_HMPLOADER_H_INCLUDED
- #include "BaseImporter.h"
- #include "../include/aiTypes.h"
- #include "../include/aiTexture.h"
- #include "../include/aiMaterial.h"
- struct aiNode;
- #include "MDLLoader.h"
- namespace Assimp
- {
- class MaterialHelper;
- #define AI_HMP_MAGIC_NUMBER_BE_4 'HMP4'
- #define AI_HMP_MAGIC_NUMBER_LE_4 '4PMH'
- #define AI_HMP_MAGIC_NUMBER_BE_5 'HMP5'
- #define AI_HMP_MAGIC_NUMBER_LE_5 '5PMH'
- #define AI_HMP_MAGIC_NUMBER_BE_7 'HMP7'
- #define AI_HMP_MAGIC_NUMBER_LE_7 '7PMH'
- namespace HMP
- {
- // ugly compiler dependent packing stuff
- #if defined(_MSC_VER) || defined(__BORLANDC__) || defined (__BCPLUSPLUS__)
- # pragma pack(push,1)
- # define PACK_STRUCT
- #elif defined( __GNUC__ )
- # define PACK_STRUCT __attribute__((packed))
- #else
- # error Compiler not supported. Never do this again.
- #endif
- // ---------------------------------------------------------------------------
- /** Data structure for the header of a HMP5 file.
- * This is also used by HMP4 and HMP7, but with modifications
- */
- struct Header_HMP5
- {
- int8_t ident[4]; // "HMP5"
- int32_t version;
-
- // ignored
- float scale[3];
- float scale_origin[3];
- float boundingradius;
-
- //! Size of one triangle in x direction
- float ftrisize_x;
- //! Size of one triangle in y direction
- float ftrisize_y;
- //! Number of vertices in x direction
- float fnumverts_x;
-
- //! Number of skins in the file
- int32_t numskins;
- // can ignore this?
- int32_t skinwidth;
- int32_t skinheight;
- //!Number of vertices in the file
- int32_t numverts;
- // ignored and zero
- int32_t numtris;
- //! only one supported ...
- int32_t numframes;
- //! Always 0 ...
- int32_t num_stverts;
- int32_t flags;
- float size;
- } PACK_STRUCT;
- // ---------------------------------------------------------------------------
- /** Data structure for a terrain vertex in a HMP4 file
- */
- struct Vertex_HMP4
- {
- uint16_t p_pos[3];
- uint8_t normals162index;
- uint8_t pad;
- } PACK_STRUCT;
- // ---------------------------------------------------------------------------
- /** Data structure for a terrain vertex in a HMP5 file
- */
- struct Vertex_HMP5
- {
- uint16_t z;
- uint8_t normals162index;
- uint8_t pad;
- } PACK_STRUCT;
- // ---------------------------------------------------------------------------
- /** Data structure for a terrain vertex in a HMP7 file
- */
- struct Vertex_HMP7
- {
- uint16_t z;
- int8_t normal_x,normal_y;
- } PACK_STRUCT;
- // reset packing to the original value
- #if defined(_MSC_VER) || defined(__BORLANDC__) || defined (__BCPLUSPLUS__)
- # pragma pack( pop )
- #endif
- #undef PACK_STRUCT
- }; //! namespace HMP
- // ---------------------------------------------------------------------------
- /** Used to load 3D GameStudio HMP files (terrains)
- */
- class HMPImporter : public MDLImporter
- {
- friend class Importer;
- protected:
- /** Constructor to be privately used by Importer */
- HMPImporter();
- /** Destructor, private as well */
- ~HMPImporter();
- public:
- // -------------------------------------------------------------------
- /** 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) const;
- protected:
- // -------------------------------------------------------------------
- /** Called by Importer::GetExtensionList() for each loaded importer.
- * See BaseImporter::GetExtensionList() for details
- */
- void GetExtensionList(std::string& append)
- {
- append.append("*.hmp");
- }
- // -------------------------------------------------------------------
- /** Imports the given file into the given scene structure.
- * See BaseImporter::InternReadFile() for details
- */
- void InternReadFile( const std::string& pFile, aiScene* pScene,
- IOSystem* pIOHandler);
- protected:
- // -------------------------------------------------------------------
- /** Import a HMP4 file
- */
- void InternReadFile_HMP4( );
- // -------------------------------------------------------------------
- /** Import a HMP5 file
- */
- void InternReadFile_HMP5( );
- // -------------------------------------------------------------------
- /** Import a HMP7 file
- */
- void InternReadFile_HMP7( );
- // -------------------------------------------------------------------
- /** Validate a HMP 5,4,7 file header
- */
- void ValidateHeader_HMP457( );
- // -------------------------------------------------------------------
- /** Try to load one material from the file, if this fails create
- * a default material
- */
- void CreateMaterial(const unsigned char* szCurrent,
- const unsigned char** szCurrentOut);
- // -------------------------------------------------------------------
- /** Build a list of output faces and vertices. The function
- * triangulates the height map read from the file
- * \param width Width of the height field
- * \param width Height of the height field
- */
- void CreateOutputFaceList(unsigned int width,unsigned int height);
- // -------------------------------------------------------------------
- /** Generate planar texture coordinates for a terrain
- * \param width Width of the terrain, in vertices
- * \param height Height of the terrain, in vertices
- */
- void GenerateTextureCoords(const unsigned int width,
- const unsigned int height);
- // -------------------------------------------------------------------
- /** Read the first skin from the file and skip all others ...
- * \param iNumSkins Number of skins in the file
- * \param szCursor Position of the first skin (offset 84)
- */
- void ReadFirstSkin(unsigned int iNumSkins, const unsigned char* szCursor,
- const unsigned char** szCursorOut);
- private:
- };
- }; // end of namespace Assimp
- #endif // AI_HMPIMPORTER_H_INC
|