Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __CS_TRIMESHLOD_H__
00020 #define __CS_TRIMESHLOD_H__
00021
00022 #include "csextern.h"
00023
00024 #include "csgeom/trimesh.h"
00025 #include "csutil/list.h"
00026
00033 class csTriangleVerticesCost;
00034
00040 class CS_CRYSTALSPACE_EXPORT csTriangleVertexCost : public csTriangleVertex
00041 {
00042 public:
00044 bool deleted;
00045
00047 float cost;
00049 int to_vertex;
00050
00052 csTriangleVertexCost () : deleted (false) { }
00054 ~csTriangleVertexCost () { }
00056 bool DelVertex (int idx);
00058 void ReplaceVertex (int old, int replace);
00059 };
00060
00064 class CS_CRYSTALSPACE_EXPORT csTriangleLODAlgo
00065 {
00066 public:
00067 virtual ~csTriangleLODAlgo () { }
00068
00073 virtual void CalculateCost (csTriangleVerticesCost* vertices,
00074 csTriangleVertexCost* vertex) = 0;
00075 };
00076
00082 class CS_CRYSTALSPACE_EXPORT csTriangleLODAlgoEdge : public csTriangleLODAlgo
00083 {
00084 public:
00085 virtual ~csTriangleLODAlgoEdge () { }
00086 virtual void CalculateCost (csTriangleVerticesCost* vertices,
00087 csTriangleVertexCost* vertex);
00088 };
00089
00094 class CS_CRYSTALSPACE_EXPORT csTriangleVerticesSorted
00095 {
00096 private:
00097 int num_vertices;
00098 csTriangleVerticesCost* vertices;
00099 csTriangleVertexCost* verts;
00100
00101 csList<int> sorted_list;
00102 csList<int>::Iterator* entry_per_vertex;
00103
00104 public:
00105 csTriangleVerticesSorted (csTriangleVerticesCost* vertices);
00106 ~csTriangleVerticesSorted ();
00107
00114 int GetLowestCostVertex ();
00115
00120 void ChangeCostVertex (int vtidx);
00121 };
00122
00129 class CS_CRYSTALSPACE_EXPORT csTriangleVerticesCost
00130 {
00131 private:
00132 csTriangleVertexCost* vertices;
00133 int num_vertices;
00134
00135 public:
00144 csTriangleVerticesCost (csTriangleMesh* mesh, csVector3* verts,
00145 int num_verts);
00147 ~csTriangleVerticesCost ();
00152 void UpdateVertices (csVector3* verts);
00153
00155 int GetVertexCount () const { return num_vertices; }
00157 csTriangleVertexCost* GetVertices () const { return vertices; }
00159 csTriangleVertexCost& GetVertex (int idx) { return vertices[idx]; }
00160
00162 void CalculateCost (csTriangleLODAlgo* lodalgo);
00163
00165 int GetMinimalCostVertex (float& min_cost);
00166
00170 csTriangleVerticesSorted* SortVertices ();
00171
00173 void Dump ();
00174 };
00175
00180 class CS_CRYSTALSPACE_EXPORT csTriangleMeshLOD
00181 {
00182 public:
00203 static void CalculateLOD (csTriangleMesh* mesh,
00204 csTriangleVerticesCost* verts,
00205 int* translate, int* emerge_from, csTriangleLODAlgo* lodalgo);
00206
00222 static csTriangle* CalculateLOD (csTriangleMesh* mesh,
00223 csTriangleVerticesCost* verts, float max_cost, int& num_triangles,
00224 csTriangleLODAlgo* lodalgo);
00225
00241 static csTriangle* CalculateLODFast (csTriangleMesh* mesh,
00242 csTriangleVerticesCost* verts, float max_cost, int& num_triangles,
00243 csTriangleLODAlgo* lodalgo);
00244 };
00245
00248 #endif // __CS_TRIMESHLOD_H__