#include <ExCOctree.h>
Public Methods | |
ExCOctree (void) | |
ExCOctree (std::vector< ExCMesh > VecMesh) | |
~ExCOctree (void) | |
void | SetSubDivisionLevel (long SubDivisionLevel) |
long | GetSubDivisionLevel (void) |
void | SetNumberMesh (long NumberMesh) |
long | GetNumberMesh (void) |
void | SetManagerTexture (ExManagerTexture *Texture) |
void | ShowOctreeSubdivision (void) |
void | HideOctreeSubdivision (void) |
void | Build (std::vector< ExCMesh > VecMesh) |
void | Draw (void) |
Data Fields | |
std::vector< ExCMesh > | m_VecMesh |
std::vector< ExCMesh >::iterator | m_ItVecMesh |
Private Methods | |
void | BuildFirstBox (void) |
void | BuildBox (ExCVertex center, double size) |
void | BuilList (void) |
void | SubDivise (void) |
bool | MeshInOctree (ExCMesh Mesh, ExCOctree *octree) |
Private Attributes | |
ExManagerTexture * | ManagerTexture |
ExCGizmoRectangle | m_GLobalBox |
long | m_NumberMesh |
GLuint | m_GlListId |
int | m_SubDivisionLevel |
bool | m_ShowOctreeSubdivision |
ExCFrustum | Frustrum |
double | maxsegment |
ExCOctree * | A |
ExCOctree * | B |
ExCOctree * | C |
ExCOctree * | D |
ExCOctree * | E |
ExCOctree * | F |
ExCOctree * | G |
ExCOctree * | H |
|
Definition at line 26 of file ExCOctree.cpp. References A, B, C, D, E, ExCOctree(), F, G, Guard, H, m_ShowOctreeSubdivision, and m_SubDivisionLevel. Referenced by ExCOctree(), SubDivise(), and ~ExCOctree().
00027 { 00028 Guard(ExCOctree::ExCOctree(void)) 00029 m_ShowOctreeSubdivision=true; 00030 m_SubDivisionLevel=1; 00031 A=NULL; 00032 B=NULL; 00033 C=NULL; 00034 D=NULL; 00035 E=NULL; 00036 F=NULL; 00037 G=NULL; 00038 H=NULL; 00039 UnGuard 00040 } |
|
Definition at line 42 of file ExCOctree.cpp. References Build(), ExCOctree(), and Guard.
00043 { 00044 Guard(ExCOctree::ExCOctree(std::vector<ExCMesh> VecMesh)) 00045 ExCOctree(); 00046 Build(VecMesh); 00047 UnGuard 00048 } |
|
Definition at line 50 of file ExCOctree.cpp. References ExCOctree(), and Guard.
|
|
Definition at line 402 of file ExCOctree.cpp. References Build(), BuildBox(), BuilList(), Guard, m_SubDivisionLevel, m_VecMesh, MAX_MESH_IN_CUBE, MAX_SUBDIVISION, and SubDivise(). Referenced by Build(), and ExCOctree().
00403 { 00404 Guard(void ExCOctree::Build(std::vector<ExCMesh> VecMesh)) 00405 m_VecMesh=VecMesh; 00406 BuildBox(ExCVertex(),1000); 00407 if(m_VecMesh.size()>MAX_MESH_IN_CUBE&&m_SubDivisionLevel<MAX_SUBDIVISION)//to many in cube 00408 { 00409 SubDivise(); 00410 }else 00411 { 00412 BuilList(); 00413 } 00414 00415 UnGuard 00416 } |
|
Definition at line 118 of file ExCOctree.cpp. References BuildBox(), ExCVertex::GetX(), ExCVertex::GetY(), ExCVertex::GetZ(), Guard, ExCGizmo::m_Center, m_GLobalBox, ExCGizmoRectangle::m_Vertex, maxsegment, ExCVertex::SetX(), ExCVertex::SetY(), and ExCVertex::SetZ(). Referenced by Build(), BuildBox(), BuildFirstBox(), and SubDivise().
00119 { 00120 Guard(void ExCOctree::BuildBox(ExCVertex center,double size)) 00121 maxsegment=size; 00122 m_GLobalBox.m_Center=center; 00123 00124 m_GLobalBox.m_Vertex[0].SetX(center.GetX()+(size/2)); 00125 m_GLobalBox.m_Vertex[0].SetY(center.GetY()+(size/2)); 00126 m_GLobalBox.m_Vertex[0].SetZ(center.GetZ()-(size/2)); 00127 m_GLobalBox.m_Vertex[1].SetX(center.GetX()+(size/2)); 00128 m_GLobalBox.m_Vertex[1].SetY(center.GetY()+(size/2)); 00129 m_GLobalBox.m_Vertex[1].SetZ(center.GetZ()+(size/2)); 00130 m_GLobalBox.m_Vertex[2].SetX(center.GetX()-(size/2)); 00131 m_GLobalBox.m_Vertex[2].SetY(center.GetY()+(size/2)); 00132 m_GLobalBox.m_Vertex[2].SetZ(center.GetZ()+(size/2)); 00133 m_GLobalBox.m_Vertex[3].SetX(center.GetX()-(size/2)); 00134 m_GLobalBox.m_Vertex[3].SetY(center.GetY()+(size/2)); 00135 m_GLobalBox.m_Vertex[3].SetZ(center.GetZ()-(size/2)); 00136 m_GLobalBox.m_Vertex[4].SetX(center.GetX()+(size/2)); 00137 m_GLobalBox.m_Vertex[4].SetY(center.GetY()-(size/2)); 00138 m_GLobalBox.m_Vertex[4].SetZ(center.GetZ()-(size/2)); 00139 m_GLobalBox.m_Vertex[5].SetX(center.GetX()+(size/2)); 00140 m_GLobalBox.m_Vertex[5].SetY(center.GetY()-(size/2)); 00141 m_GLobalBox.m_Vertex[5].SetZ(center.GetZ()+(size/2)); 00142 m_GLobalBox.m_Vertex[6].SetX(center.GetX()-(size/2)); 00143 m_GLobalBox.m_Vertex[6].SetY(center.GetY()-(size/2)); 00144 m_GLobalBox.m_Vertex[6].SetZ(center.GetZ()+(size/2)); 00145 m_GLobalBox.m_Vertex[7].SetX(center.GetX()-(size/2)); 00146 m_GLobalBox.m_Vertex[7].SetY(center.GetY()-(size/2)); 00147 m_GLobalBox.m_Vertex[7].SetZ(center.GetZ()-(size/2)); 00148 00149 /*std::cout<<"0:";m_GLobalBox.m_Vertex[0].Affich();std::cout<<std::endl; 00150 std::cout<<"1:";m_GLobalBox.m_Vertex[1].Affich();std::cout<<std::endl; 00151 std::cout<<"2:";m_GLobalBox.m_Vertex[2].Affich();std::cout<<std::endl; 00152 std::cout<<"3:";m_GLobalBox.m_Vertex[3].Affich();std::cout<<std::endl; 00153 std::cout<<"4:";m_GLobalBox.m_Vertex[4].Affich();std::cout<<std::endl; 00154 std::cout<<"5:";m_GLobalBox.m_Vertex[5].Affich();std::cout<<std::endl; 00155 std::cout<<"6:";m_GLobalBox.m_Vertex[6].Affich();std::cout<<std::endl; 00156 std::cout<<"7:";m_GLobalBox.m_Vertex[7].Affich();std::cout<<std::endl;*/ 00157 UnGuard 00158 } |
|
Definition at line 57 of file ExCOctree.cpp. References BuildBox(), BuildFirstBox(), Guard, ExCGizmo::m_Center, m_GLobalBox, m_ItVecMesh, m_VecMesh, maxsegment, ExCVertex::SetX(), ExCVertex::SetY(), and ExCVertex::SetZ(). Referenced by BuildFirstBox().
00058 { 00059 Guard(void ExCOctree::BuildFirstBox(void)) 00060 //1 build the box search for min and max value 00061 double MaxX,MaxY,MaxZ,MinX,MinY,MinZ; 00062 m_ItVecMesh=m_VecMesh.begin(); 00063 MaxX=m_ItVecMesh->A.GetX(); 00064 MinX=m_ItVecMesh->A.GetX(); 00065 MaxY=m_ItVecMesh->A.GetY(); 00066 MinY=m_ItVecMesh->A.GetY(); 00067 MaxZ=m_ItVecMesh->A.GetZ(); 00068 MinZ=m_ItVecMesh->A.GetZ(); 00069 for(m_ItVecMesh=m_VecMesh.begin();m_ItVecMesh!=m_VecMesh.end();++m_ItVecMesh) 00070 { 00071 if(m_ItVecMesh->A.GetX()<MinX){MinX=m_ItVecMesh->A.GetX();} 00072 if(m_ItVecMesh->A.GetX()>MaxX){MaxX=m_ItVecMesh->A.GetX();} 00073 if(m_ItVecMesh->B.GetX()<MinX){MinX=m_ItVecMesh->B.GetX();} 00074 if(m_ItVecMesh->B.GetX()>MaxX){MaxX=m_ItVecMesh->B.GetX();} 00075 if(m_ItVecMesh->C.GetX()<MinX){MinX=m_ItVecMesh->C.GetX();} 00076 if(m_ItVecMesh->C.GetX()>MaxX){MaxX=m_ItVecMesh->C.GetX();} 00077 00078 if(m_ItVecMesh->A.GetY()<MinY){MinY=m_ItVecMesh->A.GetY();} 00079 if(m_ItVecMesh->A.GetY()>MaxY){MaxY=m_ItVecMesh->A.GetY();} 00080 if(m_ItVecMesh->B.GetY()<MinY){MinY=m_ItVecMesh->B.GetY();} 00081 if(m_ItVecMesh->B.GetY()>MaxY){MaxY=m_ItVecMesh->B.GetY();} 00082 if(m_ItVecMesh->C.GetY()<MinY){MinY=m_ItVecMesh->C.GetY();} 00083 if(m_ItVecMesh->C.GetY()>MaxY){MaxY=m_ItVecMesh->C.GetY();} 00084 00085 if(m_ItVecMesh->A.GetZ()<MinZ){MinZ=m_ItVecMesh->A.GetZ();} 00086 if(m_ItVecMesh->A.GetZ()>MaxZ){MaxZ=m_ItVecMesh->A.GetZ();} 00087 if(m_ItVecMesh->B.GetZ()<MinZ){MinZ=m_ItVecMesh->B.GetZ();} 00088 if(m_ItVecMesh->B.GetZ()>MaxZ){MaxZ=m_ItVecMesh->B.GetZ();} 00089 if(m_ItVecMesh->C.GetZ()<MinZ){MinZ=m_ItVecMesh->C.GetZ();} 00090 if(m_ItVecMesh->C.GetZ()>MaxZ){MaxZ=m_ItVecMesh->C.GetZ();} 00091 } 00092 00093 00094 //2 search for max segment 00095 00096 if((MaxX-MinX)>=(MaxY-MinY)&&(MaxX-MinX)>=(MaxZ-MinZ)) 00097 { 00098 maxsegment=MaxX-MinX; 00099 } 00100 if((MaxY-MinY)>=(MaxX-MinX)&&(MaxY-MinY)>=(MaxZ-MinZ)) 00101 { 00102 maxsegment=MaxY-MinY; 00103 } 00104 if((MaxZ-MinZ)>=(MaxY-MinY)&&(MaxZ-MinZ)>=(MaxX-MinX)) 00105 { 00106 maxsegment=MaxZ-MinZ; 00107 } 00108 //3 serach for center 00109 m_GLobalBox.m_Center.SetX(((MaxX-MinX)/2)-maxsegment/2); 00110 m_GLobalBox.m_Center.SetY(((MaxY-MinY)/2)-maxsegment/2); 00111 m_GLobalBox.m_Center.SetZ(((MaxZ-MinZ)/2)); 00112 //4 build a cube with max segment long around the center 00113 BuildBox(m_GLobalBox.m_Center,maxsegment); 00114 00115 UnGuard 00116 } |
|
Definition at line 447 of file ExCOctree.cpp. References Guard, m_GlListId, m_ItVecMesh, m_VecMesh, ManagerTexture, and ExManagerTexture::SetCurrentObject(). Referenced by Build(), and SubDivise().
00448 { 00449 Guard(void ExMap::BuilList(void)) 00450 m_GlListId=glGenLists(1); 00451 glNewList(m_GlListId,GL_COMPILE); 00452 glColor3f(1.0f, 1.0f, 1.0f); 00453 glDisable(GL_LIGHTING); 00454 glEnable(GL_TEXTURE_2D); 00455 int i=0; 00456 00457 for(m_ItVecMesh=m_VecMesh.begin();m_ItVecMesh!=m_VecMesh.end();++m_ItVecMesh) 00458 { 00459 ManagerTexture->SetCurrentObject(m_ItVecMesh->GetMaterial()); 00460 glBegin(GL_TRIANGLES); 00461 /*if(m_ItVecMesh->m_MeshNumber%2==1)//impair 00462 { 00463 glTexCoord2f(0.0f,0.0f); 00464 }else 00465 { 00466 glTexCoord2f(1.0f,1.0f); 00467 }*/ 00468 glTexCoord2f(m_ItVecMesh->A.GetU(), m_ItVecMesh->A.GetV()); 00469 glVertex3f(m_ItVecMesh->A.GetX(),m_ItVecMesh->A.GetY(),m_ItVecMesh->A.GetZ()); 00470 /*if(m_ItVecMesh->m_MeshNumber%2==1)//impair 00471 { 00472 glTexCoord2f(1.0f,0.0f); 00473 }else 00474 { 00475 glTexCoord2f(0.0f,1.0f); 00476 } */ 00477 glTexCoord2f(m_ItVecMesh->B.GetU(), m_ItVecMesh->B.GetV()); 00478 glVertex3f(m_ItVecMesh->B.GetX(),m_ItVecMesh->B.GetY(),m_ItVecMesh->B.GetZ()); 00479 /*if(m_ItVecMesh->m_MeshNumber%2==1)//impair 00480 { 00481 glTexCoord2f(1.0f,1.0f); 00482 }else 00483 { 00484 glTexCoord2f(0.0f,0.0f); 00485 }*/ 00486 glTexCoord2f(m_ItVecMesh->C.GetU(), m_ItVecMesh->C.GetV()); 00487 glVertex3f(m_ItVecMesh->C.GetX(),m_ItVecMesh->C.GetY(),m_ItVecMesh->C.GetZ()); 00488 glEnd(); 00489 i++; 00490 } 00491 glEnable(GL_LIGHTING); 00492 glDisable(GL_TEXTURE_2D); 00493 glEndList(); 00494 UnGuard 00495 } |
|
Definition at line 418 of file ExCOctree.cpp. References A, B, C, ExCFrustum::CalculateFrustum(), ExCFrustum::CubeInFrustum(), D, ExCGizmoRectangle::Draw(), Draw(), E, F, Frustrum, G, ExCVertex::GetX(), ExCVertex::GetY(), ExCVertex::GetZ(), Guard, H, ExCGizmo::m_Center, m_GlListId, m_GLobalBox, m_SubDivisionLevel, and maxsegment. Referenced by Draw().
00419 { 00420 Guard(void ExCOctree::Draw(void)) 00421 Frustrum.CalculateFrustum(); 00422 00423 if(Frustrum.CubeInFrustum(m_GLobalBox.m_Center.GetX(),m_GLobalBox.m_Center.GetY(),m_GLobalBox.m_Center.GetZ(),maxsegment)) 00424 { 00425 if(m_ShowOctreeSubdivision) 00426 { 00427 if(m_SubDivisionLevel%1==0){glColor3f((float)m_SubDivisionLevel/10,1.0f-((float)m_SubDivisionLevel/10),1.0f);} 00428 if(m_SubDivisionLevel%2==0){glColor3f(1.0f,1.0f-((float)m_SubDivisionLevel/10),(float)m_SubDivisionLevel/10);} 00429 if(m_SubDivisionLevel%3==0){glColor3f(1.0f-((float)m_SubDivisionLevel/10),1.0f,(float)m_SubDivisionLevel/10);} 00430 m_GLobalBox.Draw(); 00431 } 00432 glCallList(m_GlListId); 00433 //DRAW CHILD 00434 if(A!=NULL)A->Draw(); 00435 if(B!=NULL)B->Draw(); 00436 if(C!=NULL)C->Draw(); 00437 if(D!=NULL)D->Draw(); 00438 if(E!=NULL)E->Draw(); 00439 if(F!=NULL)F->Draw(); 00440 if(G!=NULL)G->Draw(); 00441 if(H!=NULL)H->Draw(); 00442 } 00443 00444 UnGuard 00445 } |
|
Definition at line 75 of file ExCOctree.h. References m_NumberMesh.
00075 {m_NumberMesh=NumberMesh;} |
|
Definition at line 73 of file ExCOctree.h. References m_SubDivisionLevel.
00073 {m_SubDivisionLevel=SubDivisionLevel;} |
|
Definition at line 78 of file ExCOctree.h. References m_ShowOctreeSubdivision.
00078 {m_ShowOctreeSubdivision=true;} |
|
Definition at line 349 of file ExCOctree.cpp. References ExCMesh::A, ExCMesh::B, ExCMesh::C, ExCVertex::GetX(), ExCVertex::GetY(), ExCVertex::GetZ(), Guard, ExCGizmo::m_Center, m_GLobalBox, maxsegment, and MeshInOctree(). Referenced by MeshInOctree(), and SubDivise().
00350 { 00351 Guard(bool ExCOctree::MeshInOctree(ExCMesh Mesh,ExCOctree *octree)) 00352 double MaxX,MaxY,MaxZ,MinX,MinY,MinZ; 00353 int cmptin=0; 00354 MaxX=octree->m_GLobalBox.m_Center.GetX()+(maxsegment/2); 00355 MinX=octree->m_GLobalBox.m_Center.GetX()-(maxsegment/2); 00356 MaxY=octree->m_GLobalBox.m_Center.GetY()+(maxsegment/2); 00357 MinY=octree->m_GLobalBox.m_Center.GetY()-(maxsegment/2); 00358 MaxZ=octree->m_GLobalBox.m_Center.GetZ()+(maxsegment/2); 00359 MinZ=octree->m_GLobalBox.m_Center.GetZ()-(maxsegment/2); 00360 00361 if(Mesh.A.GetX()<=MaxX && Mesh.A.GetX()>=MinX) 00362 { 00363 if(Mesh.A.GetY()<=MaxY && Mesh.A.GetY()>=MinY) 00364 { 00365 if(Mesh.A.GetZ()<=MaxZ && Mesh.A.GetZ()>=MinZ) 00366 { 00367 cmptin++;//one point is in cube 00368 } 00369 } 00370 } 00371 00372 if(Mesh.B.GetX()<=MaxX && Mesh.B.GetX()>=MinX) 00373 { 00374 if(Mesh.B.GetY()<=MaxY && Mesh.B.GetY()>=MinY) 00375 { 00376 if(Mesh.B.GetZ()<=MaxZ && Mesh.B.GetZ()>=MinZ) 00377 { 00378 cmptin++;//one point is in cube 00379 } 00380 } 00381 } 00382 00383 if(Mesh.C.GetX()<=MaxX && Mesh.C.GetX()>=MinX) 00384 { 00385 if(Mesh.C.GetY()<=MaxY && Mesh.C.GetY()>=MinY) 00386 { 00387 if(Mesh.C.GetZ()<=MaxZ && Mesh.C.GetZ()>=MinZ) 00388 { 00389 cmptin++;//one point is in cube 00390 } 00391 } 00392 } 00393 00394 if(cmptin>1)//2 points are in cube add this mesh to this cube 00395 { 00396 return true; 00397 } 00398 else return false; 00399 UnGuard 00400 } |
|
Definition at line 76 of file ExCOctree.h. References m_NumberMesh. Referenced by SubDivise().
00076 {return m_NumberMesh;} |
|
Definition at line 74 of file ExCOctree.h. References m_SubDivisionLevel.
00074 {return m_SubDivisionLevel;} |
|
Definition at line 72 of file ExCOctree.h. Referenced by SubDivise().
00073 {m_SubDivisionLevel=SubDivisionLevel;} |
|
Definition at line 77 of file ExCOctree.h. References ManagerTexture.
00077 {ManagerTexture=Texture;} |
|
Definition at line 160 of file ExCOctree.cpp. References A, B, BuildBox(), BuilList(), C, D, E, ExCOctree(), F, G, ExCVertex::GetX(), ExCVertex::GetY(), ExCVertex::GetZ(), Guard, H, ExCGizmo::m_Center, m_GLobalBox, m_ItVecMesh, m_SubDivisionLevel, m_VecMesh, ManagerTexture, MAX_MESH_IN_CUBE, MAX_SUBDIVISION, maxsegment, MeshInOctree(), SetManagerTexture(), SetSubDivisionLevel(), ExCVertex::SetX(), ExCVertex::SetY(), ExCVertex::SetZ(), and SubDivise(). Referenced by Build(), and SubDivise().
00161 { 00162 Guard(void ExCOctree::SubDivise(void)) 00163 ExCVertex VertexTmp; 00164 A=new ExCOctree(); 00165 A->SetSubDivisionLevel(m_SubDivisionLevel+1); 00166 A->SetManagerTexture(ManagerTexture); 00167 VertexTmp.SetX(m_GLobalBox.m_Center.GetY()+maxsegment/4); 00168 VertexTmp.SetY(m_GLobalBox.m_Center.GetY()+maxsegment/4); 00169 VertexTmp.SetZ(m_GLobalBox.m_Center.GetZ()+maxsegment/4); 00170 A->BuildBox(VertexTmp,maxsegment/2); 00171 00172 B=new ExCOctree(); 00173 B->SetSubDivisionLevel(m_SubDivisionLevel+1); 00174 B->SetManagerTexture(ManagerTexture); 00175 VertexTmp.SetX(m_GLobalBox.m_Center.GetX()+maxsegment/4); 00176 VertexTmp.SetY(m_GLobalBox.m_Center.GetY()+maxsegment/4); 00177 VertexTmp.SetZ(m_GLobalBox.m_Center.GetZ()-maxsegment/4); 00178 B->BuildBox(VertexTmp,maxsegment/2); 00179 00180 C=new ExCOctree(); 00181 C->SetSubDivisionLevel(m_SubDivisionLevel+1); 00182 C->SetManagerTexture(ManagerTexture); 00183 VertexTmp.SetX(m_GLobalBox.m_Center.GetX()-maxsegment/4); 00184 VertexTmp.SetY(m_GLobalBox.m_Center.GetY()+maxsegment/4); 00185 VertexTmp.SetZ(m_GLobalBox.m_Center.GetZ()-maxsegment/4); 00186 C->BuildBox(VertexTmp,maxsegment/2); 00187 00188 D=new ExCOctree(); 00189 D->SetSubDivisionLevel(m_SubDivisionLevel+1); 00190 D->SetManagerTexture(ManagerTexture); 00191 VertexTmp.SetX(m_GLobalBox.m_Center.GetX()-maxsegment/4); 00192 VertexTmp.SetY(m_GLobalBox.m_Center.GetY()+maxsegment/4); 00193 VertexTmp.SetZ(m_GLobalBox.m_Center.GetZ()+maxsegment/4); 00194 D->BuildBox(VertexTmp,maxsegment/2); 00195 00196 /*E=new ExCOctree(); 00197 E->SetSubDivisionLevel(m_SubDivisionLevel+1); 00198 E->SetManagerTexture(ManagerTexture); 00199 VertexTmp.SetX(m_GLobalBox.m_Center.GetX()+maxsegment/4); 00200 VertexTmp.SetY(m_GLobalBox.m_Center.GetY()-maxsegment/4); 00201 VertexTmp.SetZ(m_GLobalBox.m_Center.GetZ()+maxsegment/4); 00202 E->BuildBox(VertexTmp,maxsegment/2); 00203 00204 F=new ExCOctree(); 00205 F->SetSubDivisionLevel(m_SubDivisionLevel+1); 00206 F->SetManagerTexture(ManagerTexture); 00207 VertexTmp.SetX(m_GLobalBox.m_Center.GetX()+maxsegment/4); 00208 VertexTmp.SetY(m_GLobalBox.m_Center.GetY()-maxsegment/4); 00209 VertexTmp.SetZ(m_GLobalBox.m_Center.GetZ()-maxsegment/4); 00210 F->BuildBox(VertexTmp,maxsegment/2); 00211 00212 G=new ExCOctree(); 00213 G->SetSubDivisionLevel(m_SubDivisionLevel+1); 00214 G->SetManagerTexture(ManagerTexture); 00215 VertexTmp.SetX(m_GLobalBox.m_Center.GetX()-maxsegment/4); 00216 VertexTmp.SetY(m_GLobalBox.m_Center.GetY()-maxsegment/4); 00217 VertexTmp.SetZ(m_GLobalBox.m_Center.GetZ()-maxsegment/4); 00218 G->BuildBox(VertexTmp,maxsegment/2); 00219 00220 H=new ExCOctree(); 00221 H->SetSubDivisionLevel(m_SubDivisionLevel+1); 00222 H->SetManagerTexture(ManagerTexture); 00223 VertexTmp.SetX(m_GLobalBox.m_Center.GetX()-maxsegment/4); 00224 VertexTmp.SetY(m_GLobalBox.m_Center.GetY()-maxsegment/4); 00225 VertexTmp.SetZ(m_GLobalBox.m_Center.GetZ()+maxsegment/4); 00226 H->BuildBox(VertexTmp,maxsegment/2); 00227 */ 00228 int i=0; 00229 for(m_ItVecMesh=m_VecMesh.begin(),i=0;m_ItVecMesh!=m_VecMesh.end();m_ItVecMesh++,i++) 00230 { 00231 //std::cout<<"Iter :"<<i<<" Mesh :"<<m_ItVecMesh->m_MeshNumber<<" Level :"<<m_SubDivisionLevel<<"Stay :"<<m_VecMesh.size()<<std::endl; 00232 if(MeshInOctree(*m_ItVecMesh,A)) 00233 { 00234 A->m_VecMesh.push_back(*m_ItVecMesh); 00235 //m_VecMesh.erase(m_ItVecMesh); 00236 continue; 00237 } 00238 if(MeshInOctree(*m_ItVecMesh,B)) 00239 { 00240 B->m_VecMesh.push_back(*m_ItVecMesh); 00241 //m_VecMesh.erase(m_ItVecMesh); 00242 continue; 00243 } 00244 if(MeshInOctree(*m_ItVecMesh,C)) 00245 { 00246 C->m_VecMesh.push_back(*m_ItVecMesh); 00247 //m_VecMesh.erase(m_ItVecMesh); 00248 continue; 00249 } 00250 if(MeshInOctree(*m_ItVecMesh,D)) 00251 { 00252 D->m_VecMesh.push_back(*m_ItVecMesh); 00253 //m_VecMesh.erase(m_ItVecMesh); 00254 continue; 00255 } 00256 /*if(MeshInOctree(*m_ItVecMesh,E)) 00257 { 00258 E->m_VecMesh.push_back(*m_ItVecMesh); 00259 //m_VecMesh.erase(m_ItVecMesh); 00260 continue; 00261 } 00262 if(MeshInOctree(*m_ItVecMesh,F)) 00263 { 00264 F->m_VecMesh.push_back(*m_ItVecMesh); 00265 //m_VecMesh.erase(m_ItVecMesh); 00266 continue; 00267 } 00268 if(MeshInOctree(*m_ItVecMesh,G)) 00269 { 00270 G->m_VecMesh.push_back(*m_ItVecMesh); 00271 //m_VecMesh.erase(m_ItVecMesh); 00272 continue; 00273 } 00274 if(MeshInOctree(*m_ItVecMesh,H)) 00275 { 00276 H->m_VecMesh.push_back(*m_ItVecMesh); 00277 //m_VecMesh.erase(m_ItVecMesh); 00278 continue; 00279 } */ 00280 00281 } 00282 00283 std::cout<<"Level :"<<m_SubDivisionLevel<<"Stay :"<<m_VecMesh.size()<<std::endl; 00284 if(m_VecMesh.size()>0) 00285 { 00286 BuilList(); 00287 } 00288 00289 if(A->m_VecMesh.size()==0) 00290 { 00291 //std::cout<<"No Mesh for A deleting A"<<std::endl; 00292 A=NULL; 00293 } 00294 if(B->m_VecMesh.size()==0) 00295 { 00296 //std::cout<<"No Mesh for B deleting B"<<std::endl; 00297 B=NULL; 00298 } 00299 if(C->m_VecMesh.size()==0) 00300 { 00301 //std::cout<<"No Mesh for C deleting C"<<std::endl; 00302 C=NULL; 00303 } 00304 if(D->m_VecMesh.size()==0) 00305 { 00306 //std::cout<<"No Mesh for D deleting D"<<std::endl; 00307 D=NULL; 00308 }/* 00309 if(E->m_VecMesh.size()==0) 00310 { 00311 //std::cout<<"No Mesh for B deleting B"<<std::endl; 00312 E=NULL; 00313 } 00314 if(F->m_VecMesh.size()==0) 00315 { 00316 //std::cout<<"No Mesh for B deleting B"<<std::endl; 00317 F=NULL; 00318 } 00319 if(G->m_VecMesh.size()==0) 00320 { 00321 //std::cout<<"No Mesh for B deleting B"<<std::endl; 00322 G=NULL; 00323 } 00324 if(H->m_VecMesh.size()==0) 00325 { 00326 //std::cout<<"No Mesh for B deleting B"<<std::endl; 00327 H=NULL; 00328 } */ 00329 00330 if(m_VecMesh.size()>MAX_MESH_IN_CUBE&&m_SubDivisionLevel<MAX_SUBDIVISION)//to many in cube 00331 { 00332 if(A!=NULL)A->SubDivise(); 00333 if(B!=NULL)B->SubDivise(); 00334 if(C!=NULL)C->SubDivise(); 00335 if(D!=NULL)D->SubDivise(); 00336 if(E!=NULL)E->SubDivise(); 00337 if(F!=NULL)F->SubDivise(); 00338 if(G!=NULL)G->SubDivise(); 00339 if(H!=NULL)H->SubDivise(); 00340 00341 } 00342 else 00343 { 00344 BuilList(); 00345 } 00346 UnGuard 00347 } |
|
Definition at line 53 of file ExCOctree.h. Referenced by Draw(), ExCOctree(), and SubDivise(). |
|
Definition at line 53 of file ExCOctree.h. Referenced by Draw(), ExCOctree(), and SubDivise(). |
|
Definition at line 53 of file ExCOctree.h. Referenced by Draw(), ExCOctree(), and SubDivise(). |
|
Definition at line 53 of file ExCOctree.h. Referenced by Draw(), ExCOctree(), and SubDivise(). |
|
Definition at line 53 of file ExCOctree.h. Referenced by Draw(), ExCOctree(), and SubDivise(). |
|
Definition at line 53 of file ExCOctree.h. Referenced by Draw(), ExCOctree(), and SubDivise(). |
|
Definition at line 49 of file ExCOctree.h. Referenced by Draw(). |
|
Definition at line 53 of file ExCOctree.h. Referenced by Draw(), ExCOctree(), and SubDivise(). |
|
Definition at line 53 of file ExCOctree.h. Referenced by Draw(), ExCOctree(), and SubDivise(). |
|
Definition at line 46 of file ExCOctree.h. Referenced by BuilList(), and Draw(). |
|
Definition at line 44 of file ExCOctree.h. Referenced by BuildBox(), BuildFirstBox(), Draw(), MeshInOctree(), and SubDivise(). |
|
Definition at line 70 of file ExCOctree.h. Referenced by BuildFirstBox(), BuilList(), and SubDivise(). |
|
Definition at line 45 of file ExCOctree.h. Referenced by GetNumberMesh(), and SetManagerTexture(). |
|
Definition at line 48 of file ExCOctree.h. Referenced by ExCOctree(), and HideOctreeSubdivision(). |
|
Definition at line 47 of file ExCOctree.h. Referenced by Build(), Draw(), ExCOctree(), GetSubDivisionLevel(), SetNumberMesh(), and SubDivise(). |
|
Definition at line 69 of file ExCOctree.h. Referenced by Build(), BuildFirstBox(), BuilList(), and SubDivise(). |
|
Definition at line 43 of file ExCOctree.h. Referenced by BuilList(), and SubDivise(). |
|
Definition at line 50 of file ExCOctree.h. Referenced by BuildBox(), BuildFirstBox(), Draw(), MeshInOctree(), and SubDivise(). |