/*========================================================================== * (C) 2006 Universidad Jaime I de Castellón *========================================================================== * PROYECT: GAME TOOLS *==========================================================================*/ /* CONTENT: * * * @file GeoLodManager.h *==========================================================================*/ #ifndef _GEOLODMANAGER #define _GEOLODMANAGER #include "GeoVector3.h" #include "GeoLodObject.h" #include #include namespace Geometry { class lodobj_dist_node_t { public: lodobj_dist_node_t(float dist, LodObject *o):dist2cam(dist),lodobj(o){ must_recalculate_distance=false; } float dist2cam; LodObject *lodobj; bool must_recalculate_distance; bool operator < (const lodobj_dist_node_t &o) const { return (dist2cam < o.dist2cam); } }; class LodManager { public: LodManager(float near, float far, const Geometry::Vector3 &campos); void AddLodObj(LodObject*, const Geometry::Vector3 &); void UpdateLOD(void); void UpdateCamera(const Geometry::Vector3 &); void UpdateLODObjectPos(LodObject*,const Geometry::Vector3 &); private: std::vector lodobj_dists; // key: dist2cam for efficient distance finding std::map lodobj_pos; // map key: LodObject UniqueID for efficient ID-based finding unsigned int targetFPS; Vector3 camera_pos; bool camera_changed; float near_range, far_range; float CalculateDistToCamera(const Geometry::Vector3 &) const; float SelectRandomDistance(void) const; void RecalculateDist(lodobj_dist_node_t & node); }; }; #endif