Ignore:
Timestamp:
09/04/08 10:14:18 (16 years ago)
Author:
mattausch
Message:
 
File:
1 edited

Legend:

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

    r2900 r2901  
    11#include "common.h" 
    22#include "SampleGenerator.h" 
    3 #include "Halton.h" 
     3 
    44 
    55using namespace std; 
    66 
    7 //SampleGenerator::SampleGenerator() {} 
     7HaltonSequence SphericalSampleGenerator::sHalton; 
     8HaltonSequence PoissonDiscSampleGenerator::sHalton; 
     9HaltonSequence GaussianSampleGenerator::sHalton; 
     10 
    811 
    912SampleGenerator::SampleGenerator(int numSamples, float radius): 
     
    98101void GaussianSampleGenerator::Generate(float *samples) const 
    99102{ 
    100         static HaltonSequence halton; 
    101103        float r[2]; 
    102104 
     
    110112        for (int i = 0; i < mNumSamples; ++ i) 
    111113        { 
    112                 halton.GetNext(2, r); 
     114                sHalton.GetNext(2, r); 
    113115 
    114116                float exp_x = -(r[0] * r[0]) / (2.0f * sigma * sigma); 
     
    130132void SphericalSampleGenerator::Generate(float *samples) const 
    131133{ 
    132         static HaltonSequence halton; 
    133134        float r[2]; 
     135        Sample3 *s = (Sample3 *)samples; 
    134136 
    135         Sample3 *s = (Sample3 *)samples; 
     137        // idea: use poisson distribution to generate samples 
     138        PoissonDiscSampleGenerator poisson(mNumSamples, 1.0f); 
     139        Sample2 *pSamples = new Sample2[mNumSamples]; 
     140 
     141        poisson.Generate((float *)pSamples); 
    136142 
    137143        for (int i = 0; i < mNumSamples; ++ i) 
    138144        { 
    139                 halton.GetNext(2, r); 
     145                //sHalton.GetNext(2, r); 
     146                r[0] = pSamples[i].x; r[1] = pSamples[i].y; 
    140147 
    141148                // create stratified samples over sphere 
    142149                const float theta = 2.0f * acos(sqrt(1.0f - r[0])); 
    143150                const float phi = 2.0f * M_PI * r[1]; 
     151  
     152                s[i].x = mRadius * sin(theta) * cos(phi); 
     153                s[i].y = mRadius * sin(theta) * sin(phi); 
     154                s[i].z = mRadius * cos(theta); 
     155        } 
    144156 
    145                 s[i].x = sin(theta) * cos(phi); 
    146                 s[i].y = sin(theta) * sin(phi); 
    147                 s[i].z = cos(theta); 
    148         } 
     157        delete [] pSamples; 
    149158} 
Note: See TracChangeset for help on using the changeset viewer.