Changeset 1533


Ignore:
Timestamp:
09/29/06 08:57:34 (18 years ago)
Author:
mattausch
Message:
 
Location:
GTP/trunk/Lib/Vis/Preprocessing/src
Files:
3 edited

Legend:

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

    r1528 r1533  
    2323static vector<VizStruct> vizContainer; 
    2424 
    25 GvsPreprocessor::GvsPreprocessor(): Preprocessor(), mSamplingType(0), mCastPassSamples(0), mCastTotalSamples(0) 
     25GvsPreprocessor::GvsPreprocessor():  
     26Preprocessor(), mSamplingType(0), mSampleContriPerPass(0), mTotalSampleContri(0), 
     27mReverseSamples(0), mBorderSamples(0) 
    2628{ 
    2729        Environment::GetSingleton()->GetIntValue("GvsPreprocessor.totalSamples", mTotalSamples); 
     
    7577        if (vssRay->mPvsContribution > 0) 
    7678        { 
    77                 cout << " h " << mCastPassSamples << " " << mSamplesPerPass << " " << mTotalSamples << " q: " << mRayQueue.size() << endl; 
    78                  
    79                 cout << "error!!! " << vssRay->mPvsContribution << " " << vssRay->mTerminationObject << endl; 
    80  
     79                //cout << " h " << mSampleContriPerPass << " " << mSamplesPerPass << " " << mTotalSamples << endl; 
    8180                mRayQueue.push(vssRay); 
    8281                mVssRays.push_back(new VssRay(*vssRay)); 
    83                 ++ mCastPassSamples; 
     82         
     83                ++ mSampleContriPerPass; 
     84 
    8485                return true; 
    8586        } 
     
    104105        const Vector3 c = hitTriangle.mVertices[index] - hitTriangle.mVertices[indexL]; 
    105106         
    106         const float len = 1;//Magnitude(a); 
     107        const float len = Magnitude(a); 
    107108 
    108109        const Vector3 dir1 = Normalize(CrossProd(a, b)); //N((pi-xp)×(pi+1- pi)); 
     
    170171        if (EqualVisibility(x, y)) 
    171172        { 
    172                 return 2; 
     173                return 0; 
    173174        } 
    174175        else 
    175176        { 
     177                cout << "s"; 
    176178                const Vector3 p = (p1 + p2) * 0.5f; 
    177179                SimpleRay sray(oldRay.mOrigin, p - oldRay.mOrigin); 
     
    179181                VssRay *newRay = mRayCaster->CastSingleRay(sray, mViewSpaceBox); 
    180182 
    181                 if (!newRay) return 0; 
     183                if (!newRay)  
     184                        return 0; 
     185 
    182186                const bool enqueued = HandleRay(newRay); 
    183187                 
    184188                const int s1 = SubdivideEdge(hitTriangle, p1, p, x, *newRay, oldRay); 
    185189                const int s2 = SubdivideEdge(hitTriangle, p, p2, *newRay, y, oldRay); 
    186                 return s1 + s2; 
    187                  
     190                                 
    188191                if (!enqueued) 
    189192                        delete newRay; 
     193                 
     194                return s1 + s2 + 1; 
    190195        } 
    191196} 
     
    224229                SimpleRay sr(currentRay.GetOrigin(), rayDir); 
    225230                simpleRays.AddRay(sr); 
    226  
    227                 //cout << "here244 " << (*vit) << " " << currentRay.GetOrigin() << endl; 
    228                 //cout << " sr" << sr.mOrigin << sr.mDirection << endl; 
    229231        } 
    230232 
     
    238240        VssRayContainer vssRays; 
    239241        CastRays(simpleRays, vssRays, false, false); 
    240         //CastRays(simpleRays, vssRays, true, true); 
    241         //cout << "here211 " << simpleRays.size() << " " << vssRays.size() << endl; 
     242 
    242243        // add to ray queue 
    243244        EnqueueRays(vssRays); 
    244245         
    245246        const int n = (int)enlargedTriangle.size(); 
    246          
    247 #if 0 
     247        int castRays = (int)vssRays.size(); 
     248#if 1 
    248249    // recursivly subdivide each edge 
    249250        for (int i = 0; i < n; ++ i) 
    250251        { 
    251                 SubdivideEdge( 
     252                castRays += SubdivideEdge( 
    252253                        hitTriangle, 
    253254                        enlargedTriangle[i],  
     
    258259        } 
    259260#endif 
    260         return (int)vssRays.size(); 
     261 
     262        mBorderSamples = castRays; 
     263        return castRays; 
    261264} 
    262265 
    263266 
    264267static Vector3 GetPassingPoint(const VssRay &currentRay, 
    265                                                                                 const Triangle3 &hitTriangle, 
    266                                                                                 const VssRay &oldRay) 
     268                                                          const Triangle3 &hitTriangle, 
     269                                                          const VssRay &oldRay) 
    267270{ 
    268271        // intersect triangle plane with plane spanned by current samples 
     
    275278        const float factor = 0.95f; 
    276279        float t = triPlane.FindT(intersectLine); 
    277  
    278280        const Vector3 newPoint = intersectLine.mOrigin + t * factor * intersectLine.mDirection; 
    279281 
     
    286288                                                                                 const VssRay &oldRay) 
    287289{ 
    288         cout << "r" << endl; 
     290        cout << "r"; 
     291        ++ mReverseSamples; 
     292 
    289293        //-- The plane p = (xp, hit(x), hit(xold)) is intersected 
    290294        //-- with the newly found triangle (xold is the previous ray from 
     
    315319        GenerateRays(numSamples, sampleType, simpleRays); 
    316320 
    317         //cout << "here909 " << simpleRays.size() << endl; 
    318         //for (int i = 0; i < simpleRays.size(); ++ i) 
    319         //      cout << "here544 " << simpleRays[i].mOrigin << endl; 
    320321        // generate vss rays 
    321322        VssRayContainer samples; 
     
    324325        // add to ray queue 
    325326        EnqueueRays(samples); 
    326 //for (int i = 0; i < samples.size(); ++ i) 
    327 //              cout << "here1544 " << samples[i]->mOrigin << endl; 
     327 
    328328        Debug << "generated " <<  numSamples << " samples in " << TimeDiff(startTime, GetTime()) * 1e-3 << " secs" << endl; 
    329329 
     
    348348        const int mSampleType = 0; 
    349349        // reset samples 
    350         mCastPassSamples = 0; 
    351          
    352         while (mCastPassSamples < mSamplesPerPass)  
     350        int castSamples = 0; 
     351        mSampleContriPerPass = 0; 
     352         
     353        while (castSamples < mSamplesPerPass)  
    353354        {        
    354355                // Ray queue empty =>  
    355356                // cast a number of uniform samples to fill ray Queue 
    356                 CastInitialSamples(mInitialSamples, mSampleType); 
    357                 ProcessQueue(); 
    358  
    359                 cout << "\nround finished, cast " << mCastPassSamples << " of " << mSamplesPerPass << endl; 
    360         } 
    361  
    362         mCastTotalSamples += mCastPassSamples; 
    363  
    364         return mCastPassSamples; 
     357                castSamples += CastInitialSamples(mInitialSamples, mSampleType); 
     358                castSamples += ProcessQueue(); 
     359                cout << "\ncast " << castSamples << " samples in a processing pass" << endl; 
     360        } 
     361 
     362        mTotalSampleContri += mSampleContriPerPass; 
     363 
     364        return castSamples; 
    365365} 
    366366 
     
    377377         
    378378                castSamples += AdaptiveBorderSampling(*ray); 
     379                 
    379380                delete ray; 
    380381        } 
     
    386387bool GvsPreprocessor::ComputeVisibility() 
    387388{ 
     389        cout << "Gvs Preprocessor started\n" << flush; 
     390 
    388391        Randomize(0); 
    389392        const long startTime = GetTime(); 
    390          
     393        int castSamples = 0; 
    391394        mViewSpaceBox = mKdTree->GetBox(); 
    392         cout << "Gvs Preprocessor started\n" << flush; 
    393395         
    394396        if (!mLoadViewCells) 
     
    398400        } 
    399401 
    400         while (mCastTotalSamples < mTotalSamples)  
    401         { 
    402                 Pass(); 
     402        while (castSamples < mTotalSamples)  
     403        { 
     404                castSamples += Pass(); 
    403405                                 
    404406                //////// 
    405407                //-- stats 
    406                 cout << "+"; 
    407                 cout << "\nsamples cast " << mCastPassSamples << " (=" << mCastTotalSamples << " of " << mTotalSamples << ")" << endl; 
     408                //cout << "+"; 
     409                cout << "\nsamples cast: " << castSamples << " of " << mTotalSamples << endl; 
     410 
    408411                //mVssRays.PrintStatistics(mStats); 
    409412                mStats << "#Time\n" << TimeDiff(startTime, GetTime())*1e-3 << endl 
    410                            << "#TotalSamples\n" << mCastTotalSamples << endl; 
     413                           << "#TotalSamples\n" << castSamples << endl 
     414                           << "#ContributingSamples\n" << mTotalSampleContri << endl 
     415                           << "#Reverse samples\n" << mReverseSamples << endl 
     416                           << "#Border samples\n" << mBorderSamples << endl; 
     417                                 
    411418 
    412419                mViewCellsManager->PrintPvsStatistics(mStats); 
  • GTP/trunk/Lib/Vis/Preprocessing/src/GvsPreprocessor.h

    r1528 r1533  
    129129        float mThreshold; 
    130130        VssRayContainer mVssRays; 
    131         int mCastPassSamples; 
    132         int mCastTotalSamples; 
     131        int mSampleContriPerPass; 
     132        int mTotalSampleContri; 
     133        int mReverseSamples; 
     134        int mBorderSamples; 
    133135}; 
    134136 
  • GTP/trunk/Lib/Vis/Preprocessing/src/IntelRayCaster.cpp

    r1528 r1533  
    4343        int hits = 0; 
    4444        int hittriangle; 
    45         Intersection hitA, hitB; 
     45        Intersection hitA(simpleRay.mOrigin), hitB(simpleRay.mOrigin); 
    4646 
    4747        float dist; 
     
    159159        for (i=0; i < num; i++)  
    160160        { 
    161                 Intersection hitA, hitB; 
     161                Intersection hitA(rays[i].mOrigin), hitB(rays[i].mOrigin); 
    162162                 
    163163                if (forward_hit_triangles[i] != -1 ) { 
Note: See TracChangeset for help on using the changeset viewer.