Ignore:
Timestamp:
11/25/06 00:19:18 (18 years ago)
Author:
mattausch
Message:
 
File:
1 edited

Legend:

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

    r1787 r1789  
    304304        Environment::GetSingleton()->GetIntValue("BvHierarchy.minRaysForVisibility", mMinRaysForVisibility); 
    305305        Environment::GetSingleton()->GetIntValue("BvHierarchy.maxTests", mMaxTests); 
    306         //      Environment::GetSingleton()->GetBoolValue("BvHierarchy.Construction.useInitialSubdivision", mApplyInitialPartition); 
     306        Environment::GetSingleton()->GetBoolValue("BvHierarchy.Construction.useInitialSubdivision", mApplyInitialPartition); 
    307307        Environment::GetSingleton()->GetIntValue("BvHierarchy.Construction.Initial.minObjects", mInitialMinObjects); 
    308308        Environment::GetSingleton()->GetFloatValue("BvHierarchy.Construction.Initial.maxAreaRatio", mInitialMaxAreaRatio); 
     
    957957 
    958958                const bool noValidSplit = ((objectsLeft <= Limits::Small) || (objectsRight <= Limits::Small)); 
    959                 const float sum =  noValidSplit ? 1e25 : objectsLeft * al + objectsRight * ar; 
     959                const float sum = noValidSplit ? 1e25 : objectsLeft * al + objectsRight * ar; 
    960960       
    961961                /*cout << "pos=" << (*cit).mPos << "\t q=(" << objectsLeft << "," << objectsRight <<")\t r=("  
     
    15531553                        } 
    15541554 
     1555                        // no good results for degenerate axis split 
     1556                        if (0 && tData.mNode->GetBoundingBox().Size(axis) < Limits::Small) 
     1557                                        nCostRatio[axis] += 9999; 
     1558 
    15551559                        if ((bestAxis == -1) || (nCostRatio[axis] < nCostRatio[bestAxis])) 
    15561560                        { 
     
    21492153                new BvhSubdivisionCandidate(oData); 
    21502154 
    2151         // evaluate priority 
    2152         EvalSubdivisionCandidate(*oSubdivisionCandidate); 
    21532155        bvhLeaf->SetSubdivisionCandidate(oSubdivisionCandidate); 
    21542156 
     
    21562158        mPvsEntries = CountViewCells(objects); 
    21572159 
    2158         PrintSubdivisionStats(*oSubdivisionCandidate); 
    2159          
    21602160        if (mApplyInitialPartition) 
    21612161        { 
    2162                 ApplyInitialSubdivision(oSubdivisionCandidate, tQueue);          
     2162                vector<SubdivisionCandidate *> candidateContainer; 
     2163 
     2164                mIsInitialSubdivision = true; 
     2165                 
     2166                // evaluate priority 
     2167                EvalSubdivisionCandidate(*oSubdivisionCandidate); 
     2168                PrintSubdivisionStats(*oSubdivisionCandidate); 
     2169 
     2170                ApplyInitialSubdivision(oSubdivisionCandidate, candidateContainer);              
     2171 
     2172                mIsInitialSubdivision = false; 
     2173 
     2174                vector<SubdivisionCandidate *>::const_iterator cit, cit_end = candidateContainer.end(); 
     2175 
     2176                for (cit = candidateContainer.begin(); cit != cit_end; ++ cit) 
     2177                { 
     2178                        // reevaluate priority 
     2179                        EvalSubdivisionCandidate(*oSubdivisionCandidate); 
     2180                        tQueue.Push(*cit); 
     2181                } 
    21632182        } 
    21642183        else 
    21652184        { 
     2185                // evaluate priority 
     2186                EvalSubdivisionCandidate(*oSubdivisionCandidate); 
     2187                PrintSubdivisionStats(*oSubdivisionCandidate); 
     2188 
    21662189                tQueue.Push(oSubdivisionCandidate); 
    21672190        } 
     2191                 
    21682192        cout << "!!size: " << GetStatistics().Leaves() << endl; 
    21692193} 
     
    25102534 
    25112535void BvHierarchy::ApplyInitialSubdivision(SubdivisionCandidate *firstCandidate, 
    2512                                                                                   SplitQueue &tQueue) 
    2513 { 
    2514         mIsInitialSubdivision = true; 
    2515  
     2536                                                                                  vector<SubdivisionCandidate *> &candidateContainer) 
     2537{ 
    25162538        SplitQueue tempQueue; 
    25172539        tempQueue.Push(firstCandidate); 
     
    25232545                BvhSubdivisionCandidate *bsc =  
    25242546                        dynamic_cast<BvhSubdivisionCandidate *>(candidate); 
    2525                 cout << "§§§§§§§§here49 "<< bsc->mParentData.mSortedObjects[3]->size() << " " << mInitialMinObjects << endl; 
    25262547 
    25272548                const bool globalCriteriaMet = GlobalTerminationCriteriaMet(bsc->mParentData); 
    25282549 
    25292550                if (!InitialTerminationCriteriaMet(bsc->mParentData)) 
    2530                 { 
    2531                         cout << "here9"<<bsc->mParentData.mNode->mObjects.size()<<endl; 
     2551                {cout << "here9"<<endl; 
    25322552                        BvhNode *node = Subdivide(tempQueue, bsc, globalCriteriaMet); 
    25332553 
     
    25362556                } 
    25372557                else // initial preprocessing  finished for this candidate 
    2538                 {cout << "here14"<<endl; 
     2558                {cout << "here19"<<endl; 
    25392559                        // add to "real" traversal queue 
    2540                         tQueue.Push(bsc); 
    2541                 } 
    2542         } 
    2543  
    2544         mIsInitialSubdivision = false; 
     2560                        candidateContainer.push_back(bsc); 
     2561                } 
     2562        } 
    25452563} 
    25462564 
     
    25502568                                                                        ObjectContainer &backObjects) 
    25512569{ 
    2552         cout << "*******here54 "<<tData.mSortedObjects[3]->size()<<endl; 
    25532570        ObjectContainer *objects = tData.mSortedObjects[3]; 
    25542571 
     
    25632580 
    25642581        ObjectContainer::const_iterator backObjectsStart = objects->begin(); 
    2565  
    2566     for (oit = objects->begin(); oit != (objects->end() - 1); ++ oit) 
     2582int dummy = 0; 
     2583    for (oit = objects->begin(); oit != (objects->end() - 1); ++ oit, ++ dummy) 
    25672584        { 
    25682585                Intersectable *objS = *oit; 
     
    25742591                if (areaDiff > maxAreaDiff) 
    25752592                { 
    2576                         //cout << "here5 " << areaDiff << " " << maxAreaDiff << endl; 
    25772593                        maxAreaDiff = areaDiff; 
     2594                        //cout << "maxAreaDiff : " << maxAreaDiff << " " << dummy << " " << objects->size() - dummy <<  endl; 
    25782595                        backObjectsStart = oit + 1; 
    25792596                } 
     
    25832600        for (oit = objects->begin(); oit != backObjectsStart; ++ oit) 
    25842601        { 
    2585                 backObjects.push_back(*oit); 
     2602                frontObjects.push_back(*oit); 
    25862603        } 
    25872604 
     
    25892606        for (oit = backObjectsStart; oit != oit_end; ++ oit) 
    25902607        { 
    2591                 frontObjects.push_back(*oit); 
    2592         } 
     2608                backObjects.push_back(*oit); 
     2609        } 
     2610        TriangleIntersectable *tObj1 = (TriangleIntersectable *)frontObjects.back(); 
     2611        TriangleIntersectable *tObj2 = (TriangleIntersectable *)backObjects.front(); 
     2612 
     2613        cout << "here4 " << tObj1->GetItem().GetArea() << " " << tObj2->GetItem().GetArea() << endl; 
     2614 
     2615 
     2616if (maxAreaDiff < 0.0001) 
     2617cout << "big error!!!! " << maxAreaDiff << endl; 
     2618 
     2619        cout << "front: " << (int)frontObjects.size() << " back " << (int)backObjects.size() << " " << backObjects.front()->GetBox().SurfaceArea() - frontObjects.back()->GetBox().SurfaceArea() << endl; 
    25932620} 
    25942621 
Note: See TracChangeset for help on using the changeset viewer.