Ignore:
Timestamp:
09/04/08 15:00:42 (16 years ago)
Author:
mattausch
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/App/Demos/Vis/FriendlyCulling/src/SampleGenerator.cpp

    r2902 r2903  
     1#include "SampleGenerator.h" 
    12#include "common.h" 
    2 #include "SampleGenerator.h" 
    33 
    44 
    55using namespace std; 
     6using namespace CHCDemoEngine; 
    67 
    78HaltonSequence SphericalSampleGenerator::sHalton; 
    89HaltonSequence PoissonDiscSampleGenerator::sHalton; 
    9 HaltonSequence GaussianSampleGenerator::sHalton; 
    1010HaltonSequence PseudoRandomGenerator::sHalton; 
    1111 
     
    3232        const float f_reduction = 0.9f; 
    3333 
    34         static HaltonSequence halton; 
     34        //static HaltonSequence halton; 
    3535        float r[2]; 
    3636 
    3737        // generates poisson distribution on disc 
    38         float minDist = 2.0f / sqrt((float)mNumSamples); 
     38        float minDist = 2.0f * mRadius / sqrt((float)mNumSamples); 
    3939 
    4040        //cout << "minDist before= " << minDist << endl; 
     
    5151                        ++ totalTries; 
    5252 
    53                         halton.GetNext(2, r); 
     53                        r[0] = RandomValue(0, mRadius); 
     54                        r[1] = RandomValue(0, mRadius); 
     55                        //halton.GetNext(2, r); 
    5456 
    5557                        const float rx = r[0] * 2.0f - 1.0f; 
     
    5759 
    5860                        // check if in disk, else exit early 
    59                         if (rx * rx + ry * ry > 1) 
     61                        if (rx * rx + ry * ry > mRadius * mRadius) 
    6062                                continue; 
    6163 
     
    8688                        } 
    8789                } 
    88                  
    89                 //cout << "sample: " << samples[i].x << " " << i << " " << samples[i].y << " r: " << sqrt(samples[i].x * samples[i].x  + samples[i].y * samples[i].y) << " tries: " << totalTries << endl; 
    90         } 
    91  
    92         //cout << "minDist after= " << minDist << endl; 
    93 } 
    94  
    95  
    96  
    97 GaussianSampleGenerator::GaussianSampleGenerator(int numSamples, float radius): 
    98 SampleGenerator(numSamples, radius) 
    99 {} 
    100  
    101  
    102 void GaussianSampleGenerator::Generate(float *samples) const 
    103 { 
    104         float r[2]; 
    105  
    106         const float sigma = mRadius; 
    107  
    108         Sample2 *s = (Sample2 *)samples; 
    109  
    110         const float p0 = 1.0f / (sigma * sqrt(2.0f * M_PI)); 
    111         const float p1 = 1.0f / (sigma * sqrt(2.0f * M_PI)); 
    112  
    113         for (int i = 0; i < mNumSamples; ++ i) 
    114         { 
    115                 sHalton.GetNext(2, r); 
    116  
    117                 float exp_x = -(r[0] * r[0]) / (2.0f * sigma * sigma); 
    118                 float exp_y = -(r[1] * r[1]) / (2.0f * sigma * sigma); 
    119  
    120                 s[i].x = p0 * pow(M_E, exp_x); 
    121                 s[i].y = p1 * pow(M_E, exp_y); 
    12290        } 
    12391 
     
    133101void PseudoRandomGenerator::Generate(float *samples) const 
    134102{ 
    135         sHalton.GetNext(2 * mNumSamples, samples); 
     103        Sample2 *s = (Sample2 *)samples; 
     104 
     105        int numSamples = 0; 
     106 
     107        while (numSamples < mNumSamples) 
     108        { 
     109                const float rx = RandomValue(-mRadius, +mRadius); 
     110                const float ry = RandomValue(-mRadius, +mRadius); 
     111 
     112                // check if in disk, else exit early 
     113                if (rx * rx + ry * ry > mRadius * mRadius) 
     114                        continue; 
     115 
     116                s[numSamples].x = rx; 
     117                s[numSamples].y = ry; 
     118 
     119                ++ numSamples; 
     120        } 
    136121} 
    137122 
     
    146131        float r[2]; 
    147132        Sample3 *s = (Sample3 *)samples; 
    148 /*       
    149         // idea: use poisson distribution to generate samples 
    150133 
    151         PoissonDiscSampleGenerator poisson(mNumSamples, 1.0f); 
    152         Sample2 *pSamples = new Sample2[mNumSamples]; 
    153         poisson.Generate((float *)pSamples); 
    154 */ 
    155134        for (int i = 0; i < mNumSamples; ++ i) 
    156135        { 
    157                 sHalton.GetNext(2, r); 
     136                r[0] = RandomValue(0, 1); 
     137                r[1] = RandomValue(0, 1); 
     138                //sHalton.GetNext(2, r); 
    158139                //r[0] = pSamples[i].x; r[1] = pSamples[i].y; 
    159140 
Note: See TracChangeset for help on using the changeset viewer.