Changeset 304


Ignore:
Timestamp:
10/03/05 18:05:31 (19 years ago)
Author:
mattausch
Message:

bsp candidate selection heuristics tryout

Location:
trunk/VUT/GtpVisibilityPreprocessor
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/VUT/GtpVisibilityPreprocessor/scripts/default.env

    r303 r304  
    88#       filename glasgow1.x3d 
    99#       filename vienna.x3d 
    10 #       filename ../data/vienna/vienna-simple.x3d 
    11         filename ../data/vienna/viewcells-25-sel.x3d 
     10        filename ../data/vienna/vienna-simple.x3d 
     11#       filename ../data/vienna/viewcells-25-sel.x3d 
    1212#       filename ../data/atlanta/atlanta2.x3d 
    1313#       filename ../data/soda/soda.dat 
     
    1515#       viewcells ../data/atlanta/atlanta_viewcells_large.x3d 
    1616#       viewcells ../data/atlanta/atlanta_viewcells_large2.x3d 
    17         viewcells ../data/vienna/viewcells-25-sel.x3d 
    18 #       viewcells ../data/vienna/viewcells-25.x3d 
     17#       viewcells ../data/vienna/viewcells-25-sel.x3d 
     18        viewcells ../data/vienna/viewcells-25.x3d 
    1919#       viewcells ../data/vienna/viewcells-large-sel.x3d 
    2020} 
     
    7373        # vertical axis        = 64 
    7474         
     75        splitPlaneStrategy 4 
    7576        # least splits + balanced polygons 
    7677        #splitPlaneStrategy 12 
    77         splitPlaneStrategy 32 
     78         
    7879        #axis aligned + vertical axis 
    7980        #splitPlaneStrategy 66 
     
    8990         
    9091#       constructionMethod rays 
    91 #       constructionMethod viewCells 
    92         constructionMethod sceneGeometry 
    93         maxCandidates 25 
     92        constructionMethod viewCells 
     93#       constructionMethod sceneGeometry 
     94        maxCandidates 0 
    9495        maxViewCells 999999 
    9596        Termination { 
  • trunk/VUT/GtpVisibilityPreprocessor/src/Preprocessor.cpp

    r303 r304  
    102102                break; 
    103103        case BspTree::SCENE_GEOMETRY: 
    104 #if 0 
    105104                CLEAR_CONTAINER(mViewCells); // we generate new view cells 
    106105                mSceneGraph->CollectObjects(&objects); 
    107106                mBspTree->Construct(objects, &mViewCells); 
    108 #else 
    109                 for (int i=0; i< mViewCells.size(); ++i) 
    110                         objects.push_back(mViewCells[i]); 
    111                  
    112                 mBspTree->Construct(objects, &dummy); 
    113 #endif 
    114107                break; 
    115108        case BspTree::RAYS: 
  • trunk/VUT/GtpVisibilityPreprocessor/src/ViewCellBsp.cpp

    r303 r304  
    260260mRoot(NULL),  
    261261mViewCell(viewCell), 
    262 mStorePolys(true) 
    263 //mStorePolys(false) 
     262mStoreSplitPolys(true) 
     263//mStoreSplitPolys(false) 
    264264{ 
    265265        Randomize(); // initialise random generator for heuristics 
     
    405405                                                                                &coincident, 
    406406                                                                                splits,  
    407                                                                                 mStorePolys); 
     407                                                                                mStoreSplitPolys); 
    408408                                 
    409409                                // extract view cells associated with the split polygons 
     
    422422 
    423423                                // don't need coincident polygons anymore 
    424                                 interior->ProcessPolygons(&coincident, mStorePolys); 
     424                                interior->ProcessPolygons(&coincident, mStoreSplitPolys); 
    425425 
    426426                                //Debug << "split node on level " << tData.mDepth << " bk: " << backPolys->size() << " frnt: " << frontPolys->size() << endl; 
     
    542542        mStat.polys = Copy2PolygonSoup(objects, *polys); 
    543543 
    544         bool tmpStorePolys = mStorePolys; 
    545         mStorePolys = false; 
     544        bool tmpStorePolys = mStoreSplitPolys; 
     545        mStoreSplitPolys = false; 
    546546 
    547547        // construct tree from polygon soup 
    548548        Construct(polys, viewCells); 
    549549 
    550         mStorePolys = tmpStorePolys; 
     550        mStoreSplitPolys = tmpStorePolys; 
    551551        // filter scene bounding box down the tree in order to store split polygons 
    552         if (mStorePolys) 
     552        if (mStoreSplitPolys) 
    553553        { 
    554554                Mesh *polyMesh = new Mesh(); 
     
    627627 
    628628                // remaining polygons are discarded or added to node 
    629                 tData.mNode->ProcessPolygons(tData.mPolygons, mStorePolys); 
     629                tData.mNode->ProcessPolygons(tData.mPolygons, mStoreSplitPolys); 
    630630                DEL_PTR(tData.mPolygons); 
    631631 
     
    660660         
    661661        // don't need coincident polygons anymore 
    662         interior->ProcessPolygons(&coincident, mStorePolys); 
     662        interior->ProcessPolygons(&coincident, mStoreSplitPolys); 
    663663 
    664664        // push the children on the stack 
     
    721721        int splits = 0; 
    722722         
    723         interior->SplitPolygons(polys, frontPolys, backPolys, coincident, splits, mStorePolys); 
     723        interior->SplitPolygons(polys, frontPolys, backPolys, coincident, splits, mStoreSplitPolys); 
    724724         
    725725        mStat.splits += splits; 
     
    885885                /*int axis = box.Size().DrivingAxis(); 
    886886                Vector3 norm(0,0,0); norm[axis] = 1; 
    887                 Vector3 pt = (box.Min()[axis] + box.Max()[axis]) * 0.5f;*/ 
    888                  
    889                 //return Plane3(norm, pt); 
     887                Vector3 position = (box.Min()[axis] + box.Max()[axis]) * 0.5f; 
     888                return Plane3(norm, position);*/ 
    890889        } 
    891890 
     
    905904        int bestPlaneIdx = 0; 
    906905         
    907         int limit = Min((int)polys.size(), maxTests); 
     906        int limit = maxTests > 0 ? Min((int)polys.size(), maxTests) : (int)polys.size(); 
     907         
     908        int candidateIdx = limit; 
    908909 
    909910        for (int i = 0; i < limit; ++ i) 
    910911        { 
    911                 int candidateIdx = GetNextCandidateIdx((int)polys.size()); 
     912                candidateIdx = GetNextCandidateIdx(candidateIdx, polys, (int)polys.size() - i - i); 
     913 
    912914                Plane3 candidatePlane = polys[candidateIdx]->GetSupportingPlane(); 
     915                 
    913916                 
    914917                // evaluate current candidate 
     
    926929} 
    927930 
    928 int BspTree::GetNextCandidateIdx(const int max) const 
    929 { 
    930         return Random(max); // TODO: avoid testing same plane 2 times 
     931int BspTree::GetNextCandidateIdx(int currentIdx, PolygonContainer &polys, int max) const 
     932{ 
     933#if 0 
     934        int candidateIdx = Random(max); // TODO: avoid testing same plane 2 times 
     935 
     936        // swap candidates 
     937        Polygon *p = polys[candidateIdx]; 
     938        polys[candidateIdx] = polys[max]; 
     939        polys[max] = p; 
     940 
     941        return max; 
     942#else 
     943        return ++ currentIdx; 
     944#endif 
    931945} 
    932946 
     
    11791193bool BspTree::StorePolys() const 
    11801194{ 
    1181         return mStorePolys; 
     1195        return mStoreSplitPolys; 
    11821196} 
    11831197 
  • trunk/VUT/GtpVisibilityPreprocessor/src/ViewCellBsp.h

    r303 r304  
    445445 
    446446        /** returns next candidate index 
     447                @param the current candidate index 
    447448                @param max the range of candidates 
    448449        */ 
    449         inline int GetNextCandidateIdx(const int max) const; 
     450        inline int GetNextCandidateIdx(int currentIdx, const int max) const; 
    450451 
    451452        /** Helper function which extracts a view cell on the front and the back 
  • trunk/VUT/GtpVisibilityPreprocessor/src/main.cpp

    r303 r304  
    4141  // if BSP tree construction method needs predefined view cells 
    4242 
    43   if (1)//(BspTree::sConstructionMethod == BspTree::VIEW_CELLS) 
     43  if (BspTree::sConstructionMethod == BspTree::VIEW_CELLS) 
    4444  { 
    4545          if (vcFilename != "") 
Note: See TracChangeset for help on using the changeset viewer.