// NeL - MMORPG Framework // Copyright (C) 2010 Winch Gate Property Limited // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . #ifndef NL_COARSE_MESH_BUILD_H #define NL_COARSE_MESH_BUILD_H #include "nel/misc/types_nl.h" #include "nel/misc/bitmap.h" #include #include namespace NL3D { class CMeshGeom; class CMeshBase; class ITexture; /** * Class used to build the coarse meshes * * The build method take an array of CMeshGeom an a bitmap. * This class will compute a single texture used to map every * coarse mesh passed in the array. * * Each mesh geom should be a coarse mesh. * * The uv texture coordinates of those coarse meshes will be adjusted to fit * in a single texture. * * \author Cyril 'Hulud' Corvazier * \author Nevrax France * \date 2001 */ class CCoarseMeshBuild { public: /// Coarse mesh descriptor class CCoarseMeshDesc { public: // Constructor CCoarseMeshDesc (CMeshGeom *meshGeom, const CMeshBase *baseMesh) { MeshGeom=meshGeom; MeshBase=baseMesh; } /** * The pointer on the geom mesh of the coarse mesh. * This mesh will be modified. */ CMeshGeom *MeshGeom; /** * The pointer on the base mesh used by the coarse mesh. * This class won't be modified. */ const CMeshBase *MeshBase; }; /// Statistics about the build process class CStats { public: /** * Ratio of texture used. Between 0~1. 0, the texture is empty, 1 * the texture is totaly used. */ float TextureUsed; }; /** * The build method. This method will build a single texture and adjust * the UV texture coordinates of each mesh geom. * * \param coarseMeshes is a vector of coarse mesh to compute. * \param bitmap will receive the final bitmap. * \param start will receive various statistics about the build process. * \param mulArea is the mul factor used to increase to theorical global texture size. */ bool build (const std::vector& coarseMeshes, std::vector &bitmaps, CStats& stats, float mulArea); private: class CBitmapDesc { public: // Coordinates of the bitmap in the global bitmap float U; float V; // Coordinates ratio float FactorU; float FactorV; // Pointer on the textures std::vector Bitmaps; // Pointer on the texture std::string Name; }; typedef std::map MapBitmapDesc; // Expand the border of a bitmap. void expand (NLMISC::CBitmap& bitmap); // Build the bitmap. Return false if the bitmap size is too small bool buildBitmap (const std::vector& coarseMeshes, std::vector &bitmaps, CStats& stats, MapBitmapDesc& desc, float mulArea); // Remap the coordinate void remapCoordinates (const std::vector& coarseMeshes, const MapBitmapDesc& desc, uint outputBitmapCount); }; } // NL3D #endif // NL_COARSE_MESH_BUILD_H /* End of coarse_mesh_build.h */