Ignore:
Timestamp:
03/09/07 18:30:24 (17 years ago)
Author:
mattausch
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/Lib/Vis/Preprocessing/src/BvHierarchy.cpp

    r2210 r2224  
    393393        mNodeTimer.Entry(); 
    394394 
    395 /* 
    396 #if STORE_VIEWCELLS_WITH_BVH 
    397         AssociateViewCellsWithObjects(sc.mSampledFrontObjects); 
    398         AssociateViewCellsWithObjects(sc.mSampledBackObjects); 
    399 #endif   
    400 */ 
    401395        const BvhTraversalData &tData = sc.mParentData; 
    402396        BvhLeaf *leaf = tData.mNode; 
     
    500494                AssignSortedObjects(sc, frontData, backData); 
    501495        } 
    502 /* 
    503 #if STORE_VIEWCELLS_WITH_BVH 
    504         ReleaseViewCells(sc.mSampledFrontObjects); 
    505         ReleaseViewCells(sc.mSampledBackObjects); 
    506 #endif 
    507 */ 
     496 
    508497        mNodeTimer.Exit(); 
    509498 
     
    515504BvhNode *BvHierarchy::Subdivide(SplitQueue &tQueue, 
    516505                                                                SubdivisionCandidate *splitCandidate, 
    517                                                                 const bool globalCriteriaMet) 
     506                                                                const bool globalCriteriaMet 
     507                                                                ,vector<SubdivisionCandidate *> &dirtyList 
     508                                                                ) 
    518509{ 
    519510        mSubdivTimer.Entry(); 
     
    552543                                new BvhSubdivisionCandidate(tBackData); 
    553544                 
    554                 EvalSubdivisionCandidate(*frontCandidate); 
    555                 EvalSubdivisionCandidate(*backCandidate); 
    556  
     545                // preprocess view cells 
     546                AssociateViewCellsWithObjects(*tData.mSampledObjects); 
     547 
     548                EvalSubdivisionCandidate(*frontCandidate, true, false); 
     549                EvalSubdivisionCandidate(*backCandidate, true, false); 
     550 
     551                CollectDirtyCandidates(sc, dirtyList, true); 
     552                ReleaseViewCells(*tData.mSampledObjects); 
     553                 
    557554                // cross reference 
    558555                tFrontData.mNode->SetSubdivisionCandidate(frontCandidate);  
     
    638635 
    639636void BvHierarchy::EvalSubdivisionCandidate(BvhSubdivisionCandidate &splitCandidate,  
    640                                                                                    bool computeSplitPlane) 
     637                                                                                   const bool computeSplitPlane, 
     638                                                                                   const bool preprocessViewCells) 
    641639{ 
    642640        mPlaneTimer.Entry(); 
    643641 
    644642#if STORE_VIEWCELLS_WITH_BVH 
    645         // fill view cells cache 
    646         AssociateViewCellsWithObjects(*splitCandidate.mParentData.mSampledObjects); 
     643        if (preprocessViewCells) // fill view cells cache 
     644                AssociateViewCellsWithObjects(*splitCandidate.mParentData.mSampledObjects); 
    647645#endif 
    648646 
     
    656654                const bool sufficientSamples =  
    657655                        splitCandidate.mParentData.mNumRays > mMinRaysForVisibility; 
     656 
     657                //if (!sufficientSamples) cout << splitCandidate.mParentData.mNumRays << " "; 
    658658 
    659659                const bool useVisibiliyBasedHeuristics =  
     
    757757 
    758758#if STORE_VIEWCELLS_WITH_BVH 
    759         ReleaseViewCells(*splitCandidate.mParentData.mSampledObjects); 
     759        if (preprocessViewCells) 
     760                ReleaseViewCells(*splitCandidate.mParentData.mSampledObjects); 
    760761#endif 
    761762 
     
    16721673        VssRay::NewMail(); 
    16731674 
    1674         if ((mMaxTests < tData.mNumRays) &&      mUseCostHeuristics && useVisibilityBasedHeuristics) 
     1675        /*if ((mMaxTests < tData.mNumRays) && mUseCostHeuristics && useVisibilityBasedHeuristics) 
    16751676        { 
    16761677                VssRayContainer rays; 
     
    16921693                        } 
    16931694                }                
    1694         } 
     1695        }*/ 
    16951696 
    16961697        //////////////////////////////////// 
     
    17331734                        } 
    17341735 
    1735                         // no good results for degenerate axis split 
     1736                        // avoid splits in degenerate axis with high penalty 
    17361737                        if (1 && 
    17371738                                (tData.mNode->GetBoundingBox().Size(axis) < 0.0001))//Limits::Small)) 
     
    24052406        /////////////////////////////////////// 
    24062407        // start from root of tree 
    2407         /* 
     2408 
    24082409        if (node == NULL) 
    24092410                node = mRoot; 
     
    24492450   
    24502451        return leaf; 
    2451         */ 
    24522452} 
    24532453#endif 
     
    26322632                 
    26332633                // evaluate priority 
    2634                 EvalSubdivisionCandidate(*oSubdivisionCandidate); 
     2634                EvalSubdivisionCandidate(*oSubdivisionCandidate, true, true); 
    26352635                PrintSubdivisionStats(*oSubdivisionCandidate); 
    26362636 
     
    26462646                         
    26472647                        // reevaluate priority 
    2648                         EvalSubdivisionCandidate(*sCandidate); 
     2648                        EvalSubdivisionCandidate(*sCandidate, true, true); 
    26492649                        tQueue.Push(sCandidate); 
    26502650                } 
     
    26552655        {        
    26562656                // evaluate priority 
    2657                 EvalSubdivisionCandidate(*oSubdivisionCandidate); 
     2657                EvalSubdivisionCandidate(*oSubdivisionCandidate, true, true); 
    26582658                PrintSubdivisionStats(*oSubdivisionCandidate); 
    26592659 
     
    27942794                new BvhSubdivisionCandidate(oData); 
    27952795 
    2796         EvalSubdivisionCandidate(*oSubdivisionCandidate); 
     2796        EvalSubdivisionCandidate(*oSubdivisionCandidate, true, true); 
    27972797        bvhLeaf->SetSubdivisionCandidate(oSubdivisionCandidate); 
    27982798 
     
    29292929                 
    29302930                // evaluate the changes in render cost and pvs entries 
    2931                 EvalSubdivisionCandidate(*sc, false); 
     2931                EvalSubdivisionCandidate(*sc, false, true); 
    29322932 
    29332933                // create new interior node and two leaf node 
     
    30623062                        const bool globalCriteriaMet = GlobalTerminationCriteriaMet(bsc->mParentData); 
    30633063                 
    3064                         BvhNode *node = Subdivide(tempQueue, bsc, globalCriteriaMet); 
     3064                        SubdivisionCandidateContainer dirtyList; 
     3065                        BvhNode *node = Subdivide(tempQueue, bsc, globalCriteriaMet, dirtyList); 
    30653066 
    30663067                        // not needed anymore 
Note: See TracChangeset for help on using the changeset viewer.