Ignore:
Timestamp:
05/30/08 02:37:07 (16 years ago)
Author:
mattausch
Message:

worked on gvs efficiency

File:
1 edited

Legend:

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

    r2698 r2726  
    5454 
    5555int 
    56 SamplingStrategy::GenerateSamples(const int number, 
    57                                                                   SimpleRayContainer &rays) 
     56SamplingStrategy::GenerateSamples(int number, 
     57                                                                  SimpleRayContainer &rays,  
     58                                                                  int &invalidSamples) 
    5859{ 
    5960        SimpleRay ray; 
    60         int samples = 0; 
    61         int i = 0; 
    62         const int maxTries = 20; 
     61        int oldSamples = (int)rays.size(); 
     62         
     63        static const int maxTries = 20; 
     64 
    6365        // tmp changed matt. Q: should one rejected sample  
    6466        // terminate the whole method? 
    65         for (; i < number; i++)  
     67        for (int i = 0; i < number; ++ i)  
    6668        { 
    67                 int j = 0; 
    68                 bool sampleGenerated = false; 
    69  
    70                 for (j = 0; !sampleGenerated && (j < maxTries); ++ j) 
     69                for (int j = 0; j < maxTries; ++ j) 
    7170                { 
    72                         sampleGenerated = GenerateSample(ray); 
    73  
    74                         if (sampleGenerated) 
     71                        if (GenerateSample(ray)) 
    7572                        {                
    76                                 ++ samples; 
    7773                                rays.push_back(ray); 
    78                                 //cout << "d " << ray.mDirection << " "; 
     74                                break; 
    7975                        } 
     76                        cerr<<"x"; 
     77                        ++ invalidSamples; 
    8078                } 
    8179        } 
    8280 
    83         return samples; 
     81        return (int)rays.size() - oldSamples; 
    8482} 
    8583 
     
    722720 
    723721int 
    724 MixtureDistribution::GenerateSamples(const int number, 
    725                                                                          SimpleRayContainer &rays) 
     722MixtureDistribution::GenerateSamples(int number, 
     723                                                                         SimpleRayContainer &rays, 
     724                                                                         int &invalidSamples) 
    726725{ 
    727726  for (int i=0; i < mDistributions.size(); i++)  
    728727        mDistributions[i]->mGeneratedRays = 0; 
    729728 
    730   return SamplingStrategy::GenerateSamples(number, rays); 
     729  return SamplingStrategy::GenerateSamples(number, rays, invalidSamples); 
    731730} 
    732731 
     
    804803bool ViewCellBasedDistribution::GenerateSample(SimpleRay &ray) 
    805804{ 
    806         Vector3 origin, direction;  
    807  
    808         Vector3 point; 
    809         Vector3 normal; 
    810                  
    811         float r[2]; 
    812         //for (int i=0; i < 2; i++) 
    813         // r[i] = RandomValue(0, 1); 
    814  
    815805        sHalton.GetNext(2, r); 
    816  
    817806        direction = UniformRandomVector(r[0], r[1]); 
     807         
     808#if 0 
    818809        const float c = Magnitude(direction); 
    819810 
     811        if (!((c < 1.00001f) && (c > 0.999999f))) 
     812                cerr << "len wrong" << endl; 
    820813    if (c <= Limits::Small)  
    821814                return false; 
    822815 
    823816        direction *= 1.0f / c; 
     817#endif 
    824818 
    825819        // get point on view cell surface 
    826         if (0) 
     820        if (1) 
    827821        { 
    828822                //mViewCell->GetRandomEdgePoint(origin, normal); 
    829                 mViewCell->GetRandomSurfacePoint(origin, normal); 
     823                origin = mViewCell->GetBox().GetRandomSurfacePoint(); 
    830824 
    831825                // move a little bit back to avoid piercing through walls 
    832826                // that bound the view cell 
    833                 if (0) origin -= 0.01f * normal; 
     827                //origin -= 0.01f * normal; 
    834828        } 
    835829        else 
    836830                origin = mViewCell->GetBox().GetUniformRandomSurfacePoint(); 
    837831 
    838         //direction = point - origin; 
    839  
    840         // $$ jb the pdf is yet not correct for all sampling methods! 
    841         const float pdf = 1.0f; 
     832        static const float pdf = 1.0f; 
    842833 
    843834        ray = SimpleRay(origin, direction, VIEWCELL_BASED_DISTRIBUTION, pdf); 
Note: See TracChangeset for help on using the changeset viewer.