Ignore:
Timestamp:
09/03/08 22:40:35 (16 years ago)
Author:
mattausch
Message:

changed to real 3d samples which are then projected to texture space

File:
1 edited

Legend:

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

    r2899 r2900  
    1717 
    1818 
    19 void PoissonDiscSampleGenerator::Generate(Sample2 *samples) const 
     19void PoissonDiscSampleGenerator::Generate(float *samples) const 
    2020{ 
    2121        // this is a hacky poisson sampling generator which does random dart-throwing 
     
    3535 
    3636        //cout << "minDist before= " << minDist << endl; 
     37        Sample2 *s = (Sample2 *)samples; 
    3738 
    3839        for (int i = 0; i < mNumSamples; ++ i) 
     
    6162                        { 
    6263                                const float dist =  
    63                                         sqrt((samples[j].x - rx) * (samples[j].x - rx) + 
    64                                              (samples[j].y - ry) * (samples[j].y - ry)); 
     64                                        sqrt((s[j].x - rx) * (s[j].x - rx) + 
     65                                             (s[j].y - ry) * (s[j].y - ry)); 
    6566                         
    6667                                if (dist < minDist) 
     
    7071                        if (sampleValid) 
    7172                        { 
    72                                 samples[i].x = rx; 
    73                                 samples[i].y = ry; 
     73                                s[i].x = rx; 
     74                                s[i].y = ry; 
    7475                                break; 
    7576                        } 
     
    9596 
    9697 
    97 void GaussianSampleGenerator::Generate(Sample2 *samples) const 
     98void GaussianSampleGenerator::Generate(float *samples) const 
    9899{ 
    99100        static HaltonSequence halton; 
     
    101102 
    102103        const float sigma = mRadius; 
     104 
     105        Sample2 *s = (Sample2 *)samples; 
    103106 
    104107        const float p0 = 1.0f / (sigma * sqrt(2.0f * M_PI)); 
     
    112115                float exp_y = -(r[1] * r[1]) / (2.0f * sigma * sigma); 
    113116 
    114                 samples[i].x = p0 * pow(M_E, exp_x); 
    115                 samples[i].y = p1 * pow(M_E, exp_y); 
     117                s[i].x = p0 * pow(M_E, exp_x); 
     118                s[i].y = p1 * pow(M_E, exp_y); 
    116119        } 
    117120 
     
    125128 
    126129 
    127  
    128  
    129 void SphericalSampleGenerator::Generate(Sample2 *samples) const 
     130void SphericalSampleGenerator::Generate(float *samples) const 
    130131{ 
    131132        static HaltonSequence halton; 
    132133        float r[2]; 
     134 
     135        Sample3 *s = (Sample3 *)samples; 
    133136 
    134137        for (int i = 0; i < mNumSamples; ++ i) 
     
    137140 
    138141                // create stratified samples over sphere 
    139                 const float rx = r[0]; 
    140                 const float ry = r[1]; 
     142                const float theta = 2.0f * acos(sqrt(1.0f - r[0])); 
     143                const float phi = 2.0f * M_PI * r[1]; 
    141144 
    142                 const float theta = 2.0f * acos(sqrt(1.0f - rx)); 
    143                 const float phi = 2.0f * M_PI * ry; 
    144  
    145                 float x = sin(theta) * cos(phi); 
    146                 float y = sin(theta) * sin(phi); 
    147                 float z = cos(theta); 
    148  
    149                 // project to disc 
    150                 samples[i].x = x / z; 
    151                 samples[i].y = y / z; 
     145                s[i].x = sin(theta) * cos(phi); 
     146                s[i].y = sin(theta) * sin(phi); 
     147                s[i].z = cos(theta); 
    152148        } 
    153149} 
Note: See TracChangeset for help on using the changeset viewer.