- Timestamp:
- 09/04/08 10:14:18 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
GTP/trunk/App/Demos/Vis/FriendlyCulling/src/SampleGenerator.cpp
r2900 r2901 1 1 #include "common.h" 2 2 #include "SampleGenerator.h" 3 #include "Halton.h" 3 4 4 5 5 using namespace std; 6 6 7 //SampleGenerator::SampleGenerator() {} 7 HaltonSequence SphericalSampleGenerator::sHalton; 8 HaltonSequence PoissonDiscSampleGenerator::sHalton; 9 HaltonSequence GaussianSampleGenerator::sHalton; 10 8 11 9 12 SampleGenerator::SampleGenerator(int numSamples, float radius): … … 98 101 void GaussianSampleGenerator::Generate(float *samples) const 99 102 { 100 static HaltonSequence halton;101 103 float r[2]; 102 104 … … 110 112 for (int i = 0; i < mNumSamples; ++ i) 111 113 { 112 halton.GetNext(2, r);114 sHalton.GetNext(2, r); 113 115 114 116 float exp_x = -(r[0] * r[0]) / (2.0f * sigma * sigma); … … 130 132 void SphericalSampleGenerator::Generate(float *samples) const 131 133 { 132 static HaltonSequence halton;133 134 float r[2]; 135 Sample3 *s = (Sample3 *)samples; 134 136 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); 136 142 137 143 for (int i = 0; i < mNumSamples; ++ i) 138 144 { 139 halton.GetNext(2, r); 145 //sHalton.GetNext(2, r); 146 r[0] = pSamples[i].x; r[1] = pSamples[i].y; 140 147 141 148 // create stratified samples over sphere 142 149 const float theta = 2.0f * acos(sqrt(1.0f - r[0])); 143 150 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 } 144 156 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; 149 158 }
Note: See TracChangeset
for help on using the changeset viewer.