Changeset 1934


Ignore:
Timestamp:
01/03/07 21:45:53 (18 years ago)
Author:
mattausch
Message:

gvs preprocessor is basicly working

Location:
GTP/trunk/Lib/Vis/Preprocessing/src
Files:
4 edited

Legend:

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

    r1933 r1934  
    274274        Environment::GetSingleton()->GetIntValue("BvHierarchy.Termination.minObjects", mTermMinObjects); 
    275275        Environment::GetSingleton()->GetIntValue("BvHierarchy.Termination.minRays", mTermMinRays); 
    276         Environment::GetSingleton()->GetFloatValue( 
    277                 "BvHierarchy.Termination.minProbability", mTermMinProbability); 
     276        Environment::GetSingleton()->GetFloatValue("BvHierarchy.Termination.minProbability", mTermMinProbability); 
    278277    Environment::GetSingleton()->GetIntValue("BvHierarchy.Termination.missTolerance", mTermMissTolerance); 
    279278 
  • GTP/trunk/Lib/Vis/Preprocessing/src/Environment.cpp

    r1923 r1934  
    12771277                 "1.5"); 
    12781278 
    1279  
     1279        RegisterOption("GvsPreprocessor.stats", 
     1280                                        optString, 
     1281                                        "gvs_stats=", 
     1282                                        "gvsStats.log"); 
    12801283 
    12811284  /***********************************************************************************/ 
  • GTP/trunk/Lib/Vis/Preprocessing/src/GvsPreprocessor.cpp

    r1933 r1934  
    1515{ 
    1616   
     17#define GVS_DEBUG 0 
     18 
    1719struct VizStruct 
    1820{ 
     
    2729Preprocessor(),  
    2830//mSamplingType(SamplingStrategy::DIRECTION_BASED_DISTRIBUTION), 
    29 mSamplingType(SamplingStrategy::DIRECTION_BOX_BASED_DISTRIBUTION), 
    30 mSampleContriPerPass(0),  
    31 mTotalSampleContri(0), 
    32 mReverseSamples(0),  
    33 mBorderSamples(0) 
     31mSamplingType(SamplingStrategy::DIRECTION_BOX_BASED_DISTRIBUTION) 
    3432{ 
    3533        Environment::GetSingleton()->GetIntValue("GvsPreprocessor.totalSamples", mTotalSamples); 
     
    3937        Environment::GetSingleton()->GetFloatValue("GvsPreprocessor.threshold", mThreshold);     
    4038 
     39        char gvsStatsLog[100]; 
     40        Environment::GetSingleton()->GetStringValue("GvsPreprocessor.stats", gvsStatsLog); 
     41        mGvsStatsStream.open(gvsStatsLog); 
     42 
    4143        Debug << "Gvs preprocessor options" << endl; 
    4244        Debug << "number of total samples: " << mTotalSamples << endl; 
     
    4446        Debug << "number of samples per pass: " << mSamplesPerPass << endl; 
    4547        Debug << "threshold: " << mThreshold << endl; 
    46         Debug << "eps: " << mEps << endl; 
    47  
    48         mGvsStats.open("gvspreprocessor.log"); 
     48        Debug << "epsilon: " << mEps << endl; 
     49        Debug << "stats: " << gvsStatsLog << endl; 
     50 
     51        if (0) 
     52                mOnlyRandomSampling = true; 
     53        else 
     54                mOnlyRandomSampling = false; 
     55 
     56        //mGvsStatsStream.open("gvspreprocessor.log"); 
     57        mGvsStats.Reset(); 
    4958} 
    5059 
     
    6776#endif 
    6877        { 
    69                 cout << "d"; 
     78                //cout << "r"; 
    7079                // apply reverse sampling to find the gap 
    7180                VssRay *newRay = ReverseSampling(currentRay, hitTriangle, oldRay); 
     
    8291                        delete newRay; 
    8392                } 
    84                 else if (mVssRays.size() < 3) 
     93                else if (GVS_DEBUG && (mVssRays.size() < 9)) 
    8594                { 
    8695                        mVssRays.push_back(new VssRay(oldRay)); 
     
    99108{ 
    100109        // compute the contribution to the view cells 
    101         const bool storeRaysForViz = true; 
     110        const bool storeRaysForViz = GVS_DEBUG; 
    102111 
    103112        mViewCellsManager->ComputeSampleContribution(*vssRay,  
     
    124133                } 
    125134 
    126                 //mVssRays.push_back(new VssRay(*vssRay)); 
    127         ++ mSampleContriPerPass; 
     135        ++ mGvsStats.mPassContribution; 
    128136 
    129137                return true; 
     
    328336        } 
    329337 
    330         mBorderSamples += castRays; 
     338        mGvsStats.mBorderSamples += castRays; 
    331339 
    332340        return castRays; 
     
    371379        const bool intersects = occluder.GetPlaneIntersection(plane, pt1, pt2); 
    372380 
    373         cout << "triangle: " << occluder << " pt1: " << pt1 << " pt2: " << pt2 << endl; 
    374381        if (!intersects) 
    375382                cerr << "big error!! no intersection" << endl; 
     
    395402        } 
    396403 
    397         cout << "passing point: " << newPoint << endl << endl; 
     404        //cout << "passing point: " << newPoint << endl << endl; 
    398405        return newPoint; 
    399406} 
     
    407414        Triangle3 occluder; 
    408415        Intersectable *tObj = currentRay.mTerminationObject; 
     416 
    409417        // q: why can this happen? 
    410418        if (!tObj) 
     
    434442                mRayCaster->CastRay(simpleRay, mViewCellsManager->GetViewSpaceBox()); 
    435443 
    436     ++ mReverseSamples; 
     444    ++ mGvsStats.mReverseSamples; 
    437445 
    438446        return reverseRay; 
     
    475483        // reset samples 
    476484        int castSamples = 0; 
    477         mSampleContriPerPass = 0; 
     485        mGvsStats.mPassContribution = 0; 
    478486 
    479487        while (castSamples < mSamplesPerPass)  
     
    482490                // cast a number of uniform samples to fill ray queue 
    483491                castSamples += CastInitialSamples(mInitialSamples, mSamplingType); 
    484                 castSamples += ProcessQueue(); 
    485                 //cout << "\ncast " << castSamples << " samples in a processing pass" << endl; 
    486         } 
    487  
    488         mTotalSampleContri += mSampleContriPerPass; 
     492 
     493                if (!mOnlyRandomSampling) 
     494                        castSamples += ProcessQueue(); 
     495        } 
     496 
     497        mGvsStats.mTotalContribution += mGvsStats.mPassContribution; 
    489498        return castSamples; 
    490499} 
     
    494503{ 
    495504        int castSamples = 0; 
    496         ++ mGvsPass; 
     505        ++ mGvsStats.mGvsPass; 
    497506 
    498507        while (!mRayQueue.empty())  
     
    517526        Randomize(0); 
    518527         
    519         mPass = 0; 
    520         mGvsPass = 0; 
    521         mSampleContriPerPass = 0;  
    522         mTotalSampleContri = 0; 
    523         mReverseSamples = 0; 
    524         mBorderSamples = 0; 
    525  
    526         int castSamples = 0; 
     528        mGvsStats.Reset(); 
     529        mGvsStats.Start(); 
    527530 
    528531        if (!mLoadViewCells) 
     
    542545        } 
    543546 
    544         while (castSamples < mTotalSamples)  
    545         { 
    546                 castSamples += Pass(); 
     547        mGvsStats.Stop(); 
     548        mGvsStats.Print(mGvsStatsStream); 
     549 
     550        while (mGvsStats.mTotalSamples < mTotalSamples)  
     551        { 
     552                ++ mPass; 
     553 
     554                mGvsStats.mTotalSamples += Pass(); 
    547555                                 
    548556                //////// 
    549557                //-- stats 
    550558 
    551                 cout << "\nPass " << mPass << " #samples: " << castSamples << " of " << mTotalSamples << endl; 
    552                 //mVssRays.PrintStatistics(mGvsStats); 
    553                 mGvsStats  
    554                         << "#Pass\n" << mPass << endl 
    555                         << "#Time\n" << TimeDiff(startTime, GetTime())*1e-3 << endl 
    556                         << "#TotalSamples\n" << castSamples << endl 
    557                         << "#ScDiff\n" << mSampleContriPerPass << endl 
    558                         << "#SamplesContri\n" << mTotalSampleContri << endl 
    559                         << "#ReverseSamples\n" << mReverseSamples << endl 
    560                         << "#BorderSamples\n" << mBorderSamples << endl                  
    561                         << "#GvsRuns\n" << mGvsPass << endl; 
    562  
    563                 mViewCellsManager->PrintPvsStatistics(mGvsStats); 
    564  
    565                 char str[64]; sprintf(str, "tmp/pass%04d-", mPass); 
     559                cout << "\nPass " << mPass << " #samples: " << mGvsStats.mTotalSamples << " of " << mTotalSamples << endl; 
     560                mGvsStats.mPass = mPass; 
     561                mGvsStats.Stop(); 
     562                mGvsStats.Print(mGvsStatsStream); 
     563                //mViewCellsManager->PrintPvsStatistics(mGvsStats); 
     564 
     565                if (GVS_DEBUG) 
     566                { 
     567                        char str[64]; sprintf(str, "tmp/pass%04d-", mPass); 
    566568                 
    567         // visualization 
    568                 if (mSampleContriPerPass > 0) 
    569                 { 
    570                         const bool exportRays = true; 
    571                         const bool exportPvs = true; 
    572  
    573                         mViewCellsManager->ExportSingleViewCells(mObjects, 10, false, exportPvs, exportRays, 1000, str); 
     569                        // visualization 
     570                        if (mGvsStats.mPassContribution > 0) 
     571                        { 
     572                                const bool exportRays = true; 
     573                                const bool exportPvs = true; 
     574 
     575                                mViewCellsManager->ExportSingleViewCells(mObjects,  
     576                                                                                                                 10,  
     577                                                                                                                 false,  
     578                                                                                                                 exportPvs,  
     579                                                                                                                 exportRays,  
     580                                                                                                                 1000,  
     581                                                                                                                 str); 
     582                        } 
     583 
     584                        // remove pass samples 
     585                        ViewCellContainer::const_iterator vit, vit_end = mViewCellsManager->GetViewCells().end(); 
     586                        for (vit = mViewCellsManager->GetViewCells().begin(); vit != vit_end; ++ vit) 
     587                        { 
     588                                (*vit)->DelRayRefs(); 
     589                        } 
    574590                } 
    575591 
    576                 // remove pass samples 
    577                 ViewCellContainer::const_iterator vit, vit_end = mViewCellsManager->GetViewCells().end(); 
    578                 for (vit = mViewCellsManager->GetViewCells().begin(); vit != vit_end; ++ vit) 
    579                 { 
    580                         (*vit)->DelRayRefs(); 
    581                 } 
    582  
    583                 //CLEAR_CONTAINER(mVssRays); 
    584592                // ComputeRenderError(); 
    585                 ++ mPass; 
    586         } 
    587  
    588         cout << "cast " << 2 * castSamples / (1e3f * TimeDiff(startTime, GetTime())) << "M rays/s" << endl; 
    589         Visualize(); 
     593        } 
     594 
     595        cout << "cast " << 2 * mGvsStats.mTotalSamples / (1e3f * TimeDiff(startTime, GetTime())) << "M rays/s" << endl; 
     596 
     597        if (GVS_DEBUG) 
     598        { 
     599                Visualize(); 
     600                CLEAR_CONTAINER(mVssRays); 
     601        } 
    590602 
    591603        return true; 
     
    649661} 
    650662 
    651 } 
     663 
     664void GvsStatistics::Print(ostream &app) const 
     665{ 
     666        app << "#Pass\n" << mPass << endl; 
     667        app << "#Time\n" << Time() << endl; 
     668        app << "#TotalSamples\n" << mTotalSamples << endl; 
     669        app << "#ScDiff\n" << mPassContribution << endl; 
     670        app     << "#SamplesContri\n" << mTotalContribution << endl; 
     671        app << "#ReverseSamples\n" << mReverseSamples << endl; 
     672        app << "#BorderSamples\n" << mBorderSamples << endl;             
     673        app << "#GvsRuns\n" << mGvsPass << endl; 
     674} 
     675 
     676 
     677} 
  • GTP/trunk/Lib/Vis/Preprocessing/src/GvsPreprocessor.h

    r1932 r1934  
    1313class VssRay; 
    1414 
     15/** View space partition statistics. 
     16*/ 
     17class GvsStatistics: public StatisticsBase 
     18{ 
     19public: 
     20         
     21        /// Constructor 
     22        GvsStatistics()  
     23        { 
     24                Reset(); 
     25        } 
     26         
     27        void Reset()  
     28        { 
     29                mPass = 0; 
     30                mTotalSamples = 0; 
     31                mPassContribution = 0; 
     32                mTotalContribution = 0; 
     33                mReverseSamples = 0; 
     34                mBorderSamples = 0; 
     35                mGvsPass = 0; 
     36        } 
     37 
     38 
     39public: 
     40 
     41        int mPass; 
     42        int mTotalSamples; 
     43        int mPassContribution; 
     44        int mTotalContribution; 
     45        int mReverseSamples; 
     46        int mBorderSamples; 
     47        int mGvsPass; 
     48                 
     49        void Print(ostream &app) const; 
     50 
     51        friend ostream &operator<<(ostream &s, const GvsStatistics &stat)  
     52        { 
     53                stat.Print(s); 
     54                return s; 
     55        }  
     56}; 
    1557 
    1658 
     
    148190        // stats 
    149191 
    150         int mSampleContriPerPass; 
     192        /*int mSampleContriPerPass; 
    151193        int mTotalSampleContri; 
    152194        int mReverseSamples; 
    153195        int mBorderSamples; 
    154         int mGvsPass; 
    155  
    156         ofstream mGvsStats; 
     196        int mGvsPass;*/ 
     197 
     198        ofstream mGvsStatsStream; 
     199        GvsStatistics mGvsStats; 
     200 
     201        bool mOnlyRandomSampling; 
    157202}; 
    158203 
Note: See TracChangeset for help on using the changeset viewer.