source: GTP/trunk/App/Demos/Vis/FriendlyCulling/src/SampleGenerator.h @ 3230

Revision 3230, 1.9 KB checked in by mattausch, 16 years ago (diff)

fast and cool
not using kernel for high convergence

Line 
1#ifndef __SAMPLEGENERATOR_H
2#define __SAMPLEGENERATOR_H
3
4#include "Halton.h"
5
6
7/** Class that generates samples on a circle
8*/
9
10struct Sample2
11{
12        Sample2() {}
13        Sample2(float _x, float _y): x(_x), y(_y) {}
14
15        float x;
16        float y;
17};
18
19
20struct Sample3
21{
22        Sample3() {}
23        Sample3(float _x, float _y, float _z): x(_x), y(_y), z(_z) {}
24
25        float x;
26        float y;
27        float z;
28};
29
30/** Class generating random samples on a disc or in a sphere, respectively.
31*/
32class SampleGenerator
33{
34public:
35       
36        SampleGenerator(int numSamples, float radius);
37
38        virtual void Generate(float *samples) const = 0;
39
40        virtual ~SampleGenerator();
41
42protected:
43
44        SampleGenerator() {};
45
46        HaltonSequence *mHalton;
47        int mNumSamples;
48        float mRadius;
49};
50
51
52class RandomSampleGenerator2D: public SampleGenerator
53{
54public:
55       
56        RandomSampleGenerator2D(int numSamples, float radius);
57
58        virtual void Generate(float *samples) const;
59};
60
61
62/** This class generates random samples on a disc respecting
63        the poisson disc condition (all samples at least distance d apart)
64        according to some d related to the number of samples.
65*/
66class PoissonDiscSampleGenerator2D: public SampleGenerator
67{
68public:
69       
70        PoissonDiscSampleGenerator2D(int numSamples, float radius);
71
72        virtual void Generate(float *samples) const;
73};
74
75
76/** This class generates random samples on a disc
77        that have the property that their density decreases quadratically
78        with the distance
79*/
80class QuadraticDiscSampleGenerator2D: public PoissonDiscSampleGenerator2D
81{
82public:
83       
84        QuadraticDiscSampleGenerator2D(int numSamples, float radius);
85
86        virtual void Generate(float *samples) const;
87};
88
89
90/** This class generates random spherical samples.
91*/
92class SphericalSampleGenerator3D: public SampleGenerator
93{
94public:
95       
96        SphericalSampleGenerator3D(int numSamples, float radius);
97
98        virtual void Generate(float *samples) const;
99};
100
101
102#endif
Note: See TracBrowser for help on using the repository browser.