Ignore:
Timestamp:
10/06/06 21:37:00 (18 years ago)
Author:
mattausch
Message:
 
File:
1 edited

Legend:

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

    r1577 r1580  
    174174        ReadEnvironment(); 
    175175        mSubdivisionCandidates = new SortableEntryContainer; 
     176        for (int i = 0; i < 3; ++ i) 
     177                mSortedObjects[i] = NULL; 
    176178} 
    177179 
     
    189191        DEL_PTR(mSubdivisionCandidates); 
    190192 
     193        for (int i = 0; i < 3; ++ i) 
     194        { 
     195                DEL_PTR(mSortedObjects[i]); 
     196        } 
    191197        mSubdivisionStats.close(); 
    192198} 
     
    10041010{ 
    10051011        //-- insert object queries 
    1006         ObjectContainer *objects = mUseGlobalSorting ? tData.mSortedObjects[axis] : &tData.mNode->mObjects; 
     1012        ObjectContainer *objects =  
     1013                mUseGlobalSorting ? tData.mSortedObjects[axis] : &tData.mNode->mObjects; 
    10071014 
    10081015        CreateLocalSubdivisionCandidates(*objects, &mSubdivisionCandidates, !mUseGlobalSorting, axis); 
     
    10421049 
    10431050        if (sort) 
    1044         { 
     1051        {       // no presorted candidate list 
    10451052                stable_sort((*subdivisionCandidates)->begin(), (*subdivisionCandidates)->end()); 
    10461053        } 
     
    11541161        } 
    11551162         
    1156         //////////////////////////////////////////// 
     1163        //////////////////////////////////// 
    11571164        //-- evaluate split cost for all three axis 
    11581165         
     
    11791186                                else 
    11801187                                { 
    1181                                         //-- use surface area heuristic because view cells not constructed yet                           
     1188                                        ////////////////// 
     1189                                        //-- view cells not constructed yet     => use surface area heuristic                    
    11821190                                        nCostRatio[axis] = 
    11831191                                                EvalSah( 
     
    12101218        } 
    12111219 
    1212         ///////////////////////////////////// 
     1220    //////////////// 
    12131221        //-- assign values 
    12141222 
     
    12421250                } 
    12431251 
    1244                 if (1 && ray->mOriginObject) 
     1252                if (COUNT_ORIGIN_OBJECTS && ray->mOriginObject) 
    12451253                { 
    12461254                        ray->mOriginObject->mVssRays.push_back(ray); 
     
    12981306 
    12991307float BvHierarchy::EvalRenderCost(const ObjectContainer &objects) const 
    1300 { 
    1301         if (mHierarchyManager->GetViewSpaceSubdivisionType() == HierarchyManager::NO_VIEWSPACE_SUBDIV) 
    1302         { 
     1308{        
     1309        if (mHierarchyManager->GetViewSpaceSubdivisionType() ==  
     1310                HierarchyManager::NO_VIEWSPACE_SUBDIV) 
     1311        { 
     1312                //////////////// 
     1313                //-- surface area heuristics 
     1314 
    13031315                if (objects.empty()) 
    13041316                        return 0.0f; 
    13051317 
    1306                 //////////////// 
    1307                 //-- surface area heuristics 
    1308  
    13091318                const AxisAlignedBox3 box = EvalBoundingBox(objects); 
    13101319                const float area = box.SurfaceArea(); 
    1311  
    1312                 return (float)objects.size() * area / mViewCellsManager->GetViewSpaceBox().SurfaceArea(); 
     1320                const float viewSpaceArea = mViewCellsManager->GetViewSpaceBox().SurfaceArea(); 
     1321 
     1322                return (float)objects.size() * area / viewSpaceArea; 
    13131323        } 
    13141324        else 
     
    17711781        if (mUseGlobalSorting) 
    17721782        { 
    1773                 CreateInitialSortedObjectList(oData); 
     1783                AssignInitialSortedObjectList(oData); 
    17741784        } 
    17751785         
     
    17931803 
    17941804 
    1795 void BvHierarchy::CreateInitialSortedObjectList(BvhTraversalData &tData) 
    1796 { 
    1797         SortableEntryContainer *sortedObjects = new SortableEntryContainer(); 
    1798  
     1805void BvHierarchy::AssignInitialSortedObjectList(BvhTraversalData &tData) 
     1806{ 
    17991807        // we sort the objects as a preprocess so they don't have 
    18001808        // to be sorted for each split 
    18011809        for (int i = 0; i < 3; ++ i) 
    18021810        { 
    1803                 CreateLocalSubdivisionCandidates(tData.mNode->mObjects, &sortedObjects, true, i); 
    1804                          
     1811                // create new objects 
     1812                if (!mSortedObjects[i]) 
     1813                { 
     1814                        mSortedObjects[i] = new SortableEntryContainer(); 
     1815                        CreateLocalSubdivisionCandidates(tData.mNode->mObjects, &mSortedObjects[i], true, i); 
     1816                } 
     1817 
     1818                // copy list into traversal data list 
    18051819                tData.mSortedObjects[i] = new ObjectContainer(); 
    1806                 tData.mSortedObjects[i]->reserve((int)sortedObjects->size()); 
    1807  
    1808                 SortableEntryContainer::const_iterator oit, oit_end = sortedObjects->end(); 
    1809                 for (oit = sortedObjects->begin(); oit != oit_end; ++ oit) 
     1820                tData.mSortedObjects[i]->reserve((int)mSortedObjects[i]->size()); 
     1821 
     1822                SortableEntryContainer::const_iterator oit, oit_end = mSortedObjects[i]->end(); 
     1823 
     1824                for (oit = mSortedObjects[i]->begin(); oit != oit_end; ++ oit) 
    18101825                { 
    18111826                        tData.mSortedObjects[i]->push_back((*oit).mObject); 
    18121827                } 
    18131828        } 
    1814  
    1815         delete sortedObjects; 
    18161829} 
    18171830 
     
    18851898        BvhTraversalData oData(bvhLeaf, 0, prop, nRays); 
    18861899 
     1900        AssignInitialSortedObjectList(oData); 
     1901         
     1902 
    18871903        /////////////////// 
    18881904        //-- add first candidate for object space partition      
Note: See TracChangeset for help on using the changeset viewer.