Ignore:
Timestamp:
10/23/06 20:24:14 (18 years ago)
Author:
mattausch
Message:

updated priority meaurement: taking total cost and memory into account

File:
1 edited

Legend:

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

    r1666 r1667  
    1313#include "AxisAlignedBox3.h" 
    1414#include "IntersectableWrapper.h" 
    15  
     15#include "HierarchyManager.h" 
    1616 
    1717 
     
    408408                int Type() const { return OBJECT_SPACE; } 
    409409         
    410                 void EvalPriority(bool computeSplitplane = true) 
     410                void EvalCandidate(bool computeSplitplane = true) 
    411411                { 
    412                         if (computeSplitplane) 
    413                         { 
    414                                 sBvHierarchy->EvalSubdivisionCandidate(*this);   
    415                         } 
    416                         else 
    417                         { 
    418                                 mPvsEntriesIncr = sBvHierarchy->EvalPvsEntriesIncr(*this); 
    419                                 mPriority = sBvHierarchy->EvalPriority(*this); 
    420                         } 
     412                        sBvHierarchy->EvalSubdivisionCandidate(*this, computeSplitplane); 
    421413                } 
    422414 
    423415                bool Apply(SplitQueue &splitQueue, bool terminationCriteriaMet) 
    424416                { 
    425                         BvhNode *n =  
    426                                 sBvHierarchy->Subdivide(splitQueue, this, terminationCriteriaMet); 
     417                        BvhNode *n = sBvHierarchy->Subdivide(splitQueue, this, terminationCriteriaMet); 
     418 
    427419                        // local or global termination criteria failed 
    428420                        return !n->IsLeaf();             
     
    440432                } 
    441433 
    442                 BvhSubdivisionCandidate( 
    443                         const ObjectContainer &frontObjects,  
    444                         const ObjectContainer &backObjects,  
    445                         const BvhTraversalData &tData):  
     434                BvhSubdivisionCandidate(const ObjectContainer &frontObjects,  
     435                                                                const ObjectContainer &backObjects,  
     436                                                                const BvhTraversalData &tData):  
    446437                mFrontObjects(frontObjects), mBackObjects(backObjects), mParentData(tData) 
    447438                {} 
     439 
     440                float GetPriority() const 
     441                { 
     442                        HierarchyManager *hm = sBvHierarchy->mHierarchyManager; 
     443                        if (hm->ConsiderMemory()) 
     444                        { 
     445                                const float rc = hm->GetHierarchyStats().mTotalCost - mRenderCostDecrease; 
     446                                const float mc = hm->GetHierarchyStats().mMemory + 
     447                                                                 (float)mPvsEntriesIncr * ObjectPvs::GetEntrySizeByte(); 
     448                                //cout << "x"; 
     449                                return - (rc * mc) / float(1024 * 1024); 
     450                        } 
     451                        else 
     452                        { 
     453                                return mPriority; 
     454                        } 
     455                } 
     456 
    448457 
    449458                /// pointer to parent tree. 
     
    494503        /** Evaluates candidate for splitting. 
    495504        */ 
    496         void EvalSubdivisionCandidate(BvhSubdivisionCandidate &splitData); 
     505        void EvalSubdivisionCandidate(BvhSubdivisionCandidate &splitData, bool computeSplitPlane = true); 
    497506 
    498507        /** Returns list of leaves with pvs smaller than 
     
    726735                @returns priority 
    727736        */ 
    728         float EvalPriority(const BvhSubdivisionCandidate &splitCandidate) const; 
     737        //float EvalPriority(const BvhSubdivisionCandidate &splitCandidate) const; 
    729738 
    730739        //////////////////////////////////////////////// 
Note: See TracChangeset for help on using the changeset viewer.