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_CSGEOM_BSPTREE_H__
00020 #define __CS_CSGEOM_BSPTREE_H__
00021
00022 #include "csextern.h"
00023
00024 #include "csgeom/plane3.h"
00025 #include "csgfx/trianglestream.h"
00026 #include "csutil/array.h"
00027 #include "csutil/blockallocator.h"
00028 #include "csutil/dirtyaccessarray.h"
00029 #include "csutil/set.h"
00030
00037 struct iGraphics3D;
00038
00039 struct csTriangle;
00040
00046 class CS_CRYSTALSPACE_EXPORT csBSPTree : public CS::Memory::CustomAllocated
00047 {
00048 private:
00049 CS_DECLARE_STATIC_CLASSVAR_REF(b2fArray, B2fArray, csDirtyAccessArray<int>)
00050
00051 csBSPTree* child1;
00052 csBSPTree* child2;
00053
00054 csPlane3 split_plane;
00055 csArray<int> splitters;
00056
00057 size_t FindBestSplitter (csTriangle* triangles, csPlane3* planes,
00058 size_t num_triangles, const csVector3* vertices,
00059 const csArray<int>& triidx);
00060 void Build (csTriangle* triangles, csPlane3* planes,
00061 size_t num_triangles, const csVector3* vertices,
00062 const csArray<int>& triidx);
00063 void Back2Front (const csVector3& pos, csDirtyAccessArray<int>& arr,
00064 csSet<int>& used_indices);
00065 public:
00067 csBSPTree ();
00069 ~csBSPTree ();
00070
00072 void Clear ();
00073
00075
00078 void Build (csTriangle* triangles, size_t num_triangles,
00079 const csVector3* vertices);
00080 void Build (CS::TriangleIndicesStream<int>& triangles, const csVector3* vertices);
00082
00088 const csDirtyAccessArray<int>& Back2Front (const csVector3& pos);
00089 };
00090
00093 #endif // __CS_CSGEOM_BSPTREE_H__
00094