source: GTP/trunk/Lib/Geom/shared/GTGeometry/include/GeoLodManager.h @ 1069

Revision 1069, 1.9 KB checked in by gumbau, 18 years ago (diff)

MultiIndexData? replaced by IndexData?

Line 
1/*==========================================================================
2 *      (C) 2006 Universidad Jaime I de Castellón
3 *==========================================================================
4 *      PROYECT:        GAME TOOLS
5 *==========================================================================*/
6/*      CONTENT:
7 *
8 *
9 *      @file   GeoLodManager.h
10 *==========================================================================*/
11
12#ifndef _GEOLODMANAGER
13#define _GEOLODMANAGER
14
15#include "GeoVector3.h"
16#include "GeoLodObject.h"
17#include <map>
18
19namespace Geometry
20{
21        class lodobj_dist_node_t
22        {
23        public:
24                lodobj_dist_node_t(LodObject *o):dist2cam(0.0f),lodobj(o),must_recalculate_distance(true){}
25                lodobj_dist_node_t(const lodobj_dist_node_t &c):dist2cam(c.dist2cam),lodobj(c.lodobj),must_recalculate_distance(c.must_recalculate_distance){}
26                lodobj_dist_node_t(void):dist2cam(0.0f),lodobj(NULL),must_recalculate_distance(true){}
27                float dist2cam;
28                LodObject *lodobj;
29                bool operator < (const lodobj_dist_node_t &o) const { return (dist2cam < o.dist2cam); }
30                bool must_recalculate_distance;
31        };
32
33        class lodobj_idpos_node_t;
34
35        class LodManager
36        {       
37        public:
38                LodManager(float near, float far, const Geometry::Vector3 &campos);
39                void AddLodObj(LodObject*, const Geometry::Vector3 &);
40                void UpdateLOD(void);
41                void UpdateCamera(const Geometry::Vector3 &);
42                void UpdateLODObjectPos(LodObject*,const Geometry::Vector3 &);
43        private:
44                std::map<float,Geometry::lodobj_dist_node_t> lodobj_dists; // key: dist2cam for efficient distance finding
45                std::map<Geometry::lodobj_idpos_node_t,Geometry::Vector3> lodobj_pos; // map key: LodObject UniqueID for efficient ID-based finding
46                unsigned int targetFPS;
47                Vector3 camera_pos;
48                bool camera_changed;
49                float near_range, far_range;
50                float CalculateDistToCamera(const Geometry::Vector3 &) const;
51                float SelectRandomDistance(void) const;
52        };
53};
54
55#endif
Note: See TracBrowser for help on using the repository browser.