- Timestamp:
- 09/03/08 22:40:35 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/App/Demos/Vis/FriendlyCulling/src/SampleGenerator.cpp
r2899 r2900 17 17 18 18 19 void PoissonDiscSampleGenerator::Generate( Sample2*samples) const19 void PoissonDiscSampleGenerator::Generate(float *samples) const 20 20 { 21 21 // this is a hacky poisson sampling generator which does random dart-throwing … … 35 35 36 36 //cout << "minDist before= " << minDist << endl; 37 Sample2 *s = (Sample2 *)samples; 37 38 38 39 for (int i = 0; i < mNumSamples; ++ i) … … 61 62 { 62 63 const float dist = 63 sqrt((s amples[j].x - rx) * (samples[j].x - rx) +64 (s amples[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)); 65 66 66 67 if (dist < minDist) … … 70 71 if (sampleValid) 71 72 { 72 s amples[i].x = rx;73 s amples[i].y = ry;73 s[i].x = rx; 74 s[i].y = ry; 74 75 break; 75 76 } … … 95 96 96 97 97 void GaussianSampleGenerator::Generate( Sample2*samples) const98 void GaussianSampleGenerator::Generate(float *samples) const 98 99 { 99 100 static HaltonSequence halton; … … 101 102 102 103 const float sigma = mRadius; 104 105 Sample2 *s = (Sample2 *)samples; 103 106 104 107 const float p0 = 1.0f / (sigma * sqrt(2.0f * M_PI)); … … 112 115 float exp_y = -(r[1] * r[1]) / (2.0f * sigma * sigma); 113 116 114 s amples[i].x = p0 * pow(M_E, exp_x);115 s amples[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); 116 119 } 117 120 … … 125 128 126 129 127 128 129 void SphericalSampleGenerator::Generate(Sample2 *samples) const 130 void SphericalSampleGenerator::Generate(float *samples) const 130 131 { 131 132 static HaltonSequence halton; 132 133 float r[2]; 134 135 Sample3 *s = (Sample3 *)samples; 133 136 134 137 for (int i = 0; i < mNumSamples; ++ i) … … 137 140 138 141 // 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]; 141 144 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); 152 148 } 153 149 }
Note: See TracChangeset
for help on using the changeset viewer.