void computeSurfaceQuadTree(CInteriorSurface &surface, CSurfaceQuadTree &quad) { uint i, j; CAABBox box; bool first = true; for (i=0; i<surface.Faces.size(); ++i) { for (j=0; j<3; ++j) { const CVector &v = surface.CollisionMeshBuild->Vertices[surface.CollisionMeshBuild->Faces[surface.Faces[i]].V[j]]; if (first) box.setCenter(v), first=false; else box.extend(v); } } quad.clear(); quad.init(4.0f, 6, box.getCenter(), std::max(box.getHalfSize().x, box.getHalfSize().y)); for (i=0; i<surface.Faces.size(); ++i) { for (j=0; j<3; ++j) { const CVector &v = surface.CollisionMeshBuild->Vertices[surface.CollisionMeshBuild->Faces[surface.Faces[i]].V[j]]; quad.addVertex(v); } } quad.compile(); }
bool operator () (const CAABBox &a, const CAABBox &b) const { return a.getCenter().z < b.getCenter().z; }