00001 /* 00002 * ExNihilo 3D Engine 00003 * 00004 * This program is free software; you can redistribute it and/or modify 00005 * it under the terms of the GNU General Public License as published by 00006 * the Free Software Foundation; either version 2 of the License, or 00007 * (at your option) any later version. 00008 * 00009 * This program is distributed in the hope that it will be useful, 00010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 * GNU Library General Public License for more details. 00013 * 00014 * You should have received a copy of the GNU General Public License 00015 * along with this program; if not, write to the Free Software 00016 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00017 * 00018 * Please read AUTHORS file !!! 00019 * 00020 * $Id: ExCOctree.h,v 1.4 2002/06/16 00:51:04 binny Exp $ 00021 * 00022 */ 00023 00024 #ifndef __EXCOCTREE_H__ 00025 #define __EXCOCTREE_H__ 00026 //-------------------------------- 00027 // File to include 00028 //-------------------------------- 00029 #include "ExDefine.h" 00030 #include "ExMath.h" 00031 #include "ExCFrustum.h" 00032 #include "ExManagerTexture.h" 00033 #include "ExCGizmoRectangle.h" 00034 #define MAX_MESH_IN_CUBE 200 00035 #define MAX_SUBDIVISION 5 00036 //-------------------------------- 00037 class ExCOctree 00038 { 00039 private: 00040 00041 //-------------------------------- 00042 // Variable 00043 //-------------------------------- 00044 ExManagerTexture *ManagerTexture; 00045 ExCGizmoRectangle m_GLobalBox; 00046 long m_NumberMesh; 00047 GLuint m_GlListId; 00048 int m_SubDivisionLevel; 00049 bool m_ShowOctreeSubdivision; 00050 ExCFrustum Frustrum; 00051 double maxsegment; 00052 00053 00054 ExCOctree *A,*B,*C,*D,*E,*F,*G,*H; 00055 void BuildFirstBox(void); 00056 void BuildBox(ExCVertex center,double size); 00057 void BuilList(void); 00058 void SubDivise(void); 00059 bool MeshInOctree(ExCMesh Mesh,ExCOctree *octree); 00060 public: 00061 //-------------------------------- 00062 // Constructor // Destructor 00063 //-------------------------------- 00064 ExCOctree(void); 00065 ExCOctree(std::vector<ExCMesh> VecMesh); 00066 ~ExCOctree(void); 00067 //-------------------------------- 00068 // Methode 00069 //-------------------------------- 00070 std::vector<ExCMesh> m_VecMesh; 00071 std::vector<ExCMesh>::iterator m_ItVecMesh; 00072 00073 inline void SetSubDivisionLevel(long SubDivisionLevel){m_SubDivisionLevel=SubDivisionLevel;} 00074 inline long GetSubDivisionLevel(void){return m_SubDivisionLevel;} 00075 inline void SetNumberMesh(long NumberMesh){m_NumberMesh=NumberMesh;} 00076 inline long GetNumberMesh(void){return m_NumberMesh;} 00077 inline void SetManagerTexture(ExManagerTexture * Texture){ManagerTexture=Texture;} 00078 inline void ShowOctreeSubdivision(void){m_ShowOctreeSubdivision=true;} 00079 inline void HideOctreeSubdivision(void){m_ShowOctreeSubdivision=false;} 00080 void Build(std::vector<ExCMesh> VecMesh); 00081 void Draw(void); 00082 }; 00083 #endif //__EXCOCTREE_H__