source: GTP/trunk/Lib/Vis/Preprocessing/src/SamplingStrategy.h @ 1824

Revision 1824, 5.0 KB checked in by bittner, 18 years ago (diff)

global lines support

Line 
1#ifndef _SamplingStategy_H__
2#define _SamplingStategy_H__
3
4
5namespace GtpVisibilityPreprocessor {
6
7
8class Preprocessor;
9struct SimpleRay;
10class SimpleRayContainer;
11
12/** This class generates a specific sampling strategy.
13*/
14class SamplingStrategy
15{
16public:
17
18        /** Sample rays of particular type
19        */
20        enum
21        {
22                OBJECT_BASED_DISTRIBUTION,
23                DIRECTION_BASED_DISTRIBUTION,
24                DIRECTION_BOX_BASED_DISTRIBUTION,
25                SPATIAL_BOX_BASED_DISTRIBUTION,
26                RSS_BASED_DISTRIBUTION,
27                RSS_SILHOUETTE_BASED_DISTRIBUTION,
28                VSS_BASED_DISTRIBUTION,
29                OBJECT_DIRECTION_BASED_DISTRIBUTION,
30                OBJECTS_INTERIOR_DISTRIBUTION,
31                REVERSE_OBJECT_BASED_DISTRIBUTION,
32                VIEWCELL_BORDER_BASED_DISTRIBUTION,
33                VIEWSPACE_BORDER_BASED_DISTRIBUTION,
34                REVERSE_VIEWSPACE_BORDER_BASED_DISTRIBUTION,
35                GLOBAL_LINES_DISTRIBUTION
36        };
37
38        /** Default constructor
39        */
40        SamplingStrategy(const Preprocessor &preprocessor);
41
42        virtual ~SamplingStrategy();
43
44        /** Each strategy has to implement this function.
45        @returns true if generated valid sample.
46        */
47
48        virtual int GenerateSamples(const int number, SimpleRayContainer &rays) const;
49
50private:
51
52        virtual bool GenerateSample(SimpleRay &ray) const = 0;
53
54public:
55        /// variables usefull for mixed distribution sampling
56        int mType;
57        int mRays;
58        float mContribution;
59        float mTime;
60        float mRatio;
61
62protected:
63
64        const Preprocessor &mPreprocessor;
65
66};
67
68
69class ObjectBasedDistribution: public SamplingStrategy
70{
71 public:
72       
73  ObjectBasedDistribution(const Preprocessor &preprocessor):
74        SamplingStrategy(preprocessor) {
75        mType = OBJECT_BASED_DISTRIBUTION;
76  }
77
78private:
79  virtual bool GenerateSample(SimpleRay &ray) const;
80};
81
82
83class ReverseObjectBasedDistribution: public SamplingStrategy
84{
85 public:
86       
87         ReverseObjectBasedDistribution(const Preprocessor &preprocessor):
88           SamplingStrategy(preprocessor) {
89           mType = REVERSE_OBJECT_BASED_DISTRIBUTION;
90         }
91
92private:
93  virtual bool GenerateSample(SimpleRay &ray) const;
94};
95
96
97class ObjectDirectionBasedDistribution: public SamplingStrategy
98{
99 public:
100         ObjectDirectionBasedDistribution(const Preprocessor &preprocessor):
101         SamplingStrategy(preprocessor) {
102           mType = OBJECT_DIRECTION_BASED_DISTRIBUTION;
103         }
104private:
105        virtual bool GenerateSample(SimpleRay &ray) const;
106};
107
108
109class DirectionBasedDistribution: public SamplingStrategy
110{
111 public:
112  DirectionBasedDistribution(const Preprocessor &preprocessor):
113        SamplingStrategy(preprocessor){
114        mType = DIRECTION_BASED_DISTRIBUTION;
115  }
116private:
117  virtual bool GenerateSample(SimpleRay &ray) const;
118};
119
120
121class DirectionBoxBasedDistribution: public SamplingStrategy
122{
123 public:
124         DirectionBoxBasedDistribution(const Preprocessor &preprocessor):
125           SamplingStrategy(preprocessor){
126           mType = DIRECTION_BOX_BASED_DISTRIBUTION;
127         }
128           
129private:
130           virtual bool GenerateSample(SimpleRay &ray) const;
131};
132
133
134class SpatialBoxBasedDistribution: public SamplingStrategy
135{
136 public:
137         SpatialBoxBasedDistribution(const Preprocessor &preprocessor):
138           SamplingStrategy(preprocessor){
139           mType = DIRECTION_BOX_BASED_DISTRIBUTION;
140         }
141           
142private:
143           virtual bool GenerateSample(SimpleRay &ray) const;
144};
145
146
147class ViewSpaceBorderBasedDistribution: public SamplingStrategy
148{
149 public:
150         ViewSpaceBorderBasedDistribution(const Preprocessor &preprocessor):
151           SamplingStrategy(preprocessor){
152           mType = SPATIAL_BOX_BASED_DISTRIBUTION;
153         }
154         
155private:
156         virtual bool GenerateSample(SimpleRay &ray) const;
157};
158
159
160class ReverseViewSpaceBorderBasedDistribution: public SamplingStrategy
161{
162 public:
163         ReverseViewSpaceBorderBasedDistribution(const Preprocessor &preprocessor):
164           SamplingStrategy(preprocessor){
165           mType = SPATIAL_BOX_BASED_DISTRIBUTION;
166         }
167         
168private:
169         virtual bool GenerateSample(SimpleRay &ray) const;
170};
171
172
173class RssBasedDistribution: public SamplingStrategy
174{
175 public:
176  RssBasedDistribution(const Preprocessor &preprocessor):
177        SamplingStrategy(preprocessor){
178        mType = RSS_BASED_DISTRIBUTION;
179  }
180
181
182  virtual int GenerateSamples(const int number, SimpleRayContainer &ray) const {
183        // TBD!!!
184        return 0;
185  }
186
187private:
188  virtual bool GenerateSample(SimpleRay &ray) const;
189 
190};
191
192
193class ViewCellBorderBasedDistribution: public SamplingStrategy
194{
195 public:
196  ViewCellBorderBasedDistribution(const Preprocessor &preprocessor):
197        SamplingStrategy(preprocessor) {}
198 
199  virtual bool GenerateSample(SimpleRay &ray) const;
200};
201
202class GlobalLinesDistribution: public SamplingStrategy
203{
204public:
205  GlobalLinesDistribution(const Preprocessor &preprocessor):
206                SamplingStrategy(preprocessor) {
207                mType = GLOBAL_LINES_DISTRIBUTION;
208        }
209 
210  virtual bool GenerateSample(SimpleRay &ray) const;
211};
212
213
214/** This strategy generates samples inside of the objects, e.g.,
215        for sampling the inside of a colon.
216*/
217/*class ObjectsInteriorDistribution: public SamplingStrategy
218{
219 public:
220         ObjectsInteriorDistribution(const Preprocessor &preprocessor):
221         SamplingStrategy(preprocessor) {}
222         
223         virtual bool GenerateSample(SimpleRay &ray) const;
224};
225*/
226};
227
228#endif
Note: See TracBrowser for help on using the repository browser.