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

RevLine 
[1020]1#ifndef _SamplingStategy_H__
2#define _SamplingStategy_H__
3
4
5namespace GtpVisibilityPreprocessor {
6
7
8class Preprocessor;
9struct SimpleRay;
[1771]10class SimpleRayContainer;
[1020]11
12/** This class generates a specific sampling strategy.
13*/
14class SamplingStrategy
15{
[1772]16public:
[1020]17
[1772]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,
[1824]34                REVERSE_VIEWSPACE_BORDER_BASED_DISTRIBUTION,
35                GLOBAL_LINES_DISTRIBUTION
[1772]36        };
[1520]37
[1772]38        /** Default constructor
39        */
40        SamplingStrategy(const Preprocessor &preprocessor);
[1020]41
[1772]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
[1771]50private:
[1020]51
[1772]52        virtual bool GenerateSample(SimpleRay &ray) const = 0;
[1020]53
[1771]54public:
[1772]55        /// variables usefull for mixed distribution sampling
56        int mType;
57        int mRays;
58        float mContribution;
59        float mTime;
60        float mRatio;
61
[1020]62protected:
[1772]63
64        const Preprocessor &mPreprocessor;
65
[1020]66};
67
68
69class ObjectBasedDistribution: public SamplingStrategy
70{
71 public:
72       
[1771]73  ObjectBasedDistribution(const Preprocessor &preprocessor):
74        SamplingStrategy(preprocessor) {
75        mType = OBJECT_BASED_DISTRIBUTION;
76  }
[1020]77
[1771]78private:
79  virtual bool GenerateSample(SimpleRay &ray) const;
[1020]80};
81
82
[1695]83class ReverseObjectBasedDistribution: public SamplingStrategy
84{
85 public:
86       
87         ReverseObjectBasedDistribution(const Preprocessor &preprocessor):
[1771]88           SamplingStrategy(preprocessor) {
89           mType = REVERSE_OBJECT_BASED_DISTRIBUTION;
90         }
[1695]91
[1771]92private:
93  virtual bool GenerateSample(SimpleRay &ray) const;
[1695]94};
95
96
[1020]97class ObjectDirectionBasedDistribution: public SamplingStrategy
98{
99 public:
100         ObjectDirectionBasedDistribution(const Preprocessor &preprocessor):
[1771]101         SamplingStrategy(preprocessor) {
102           mType = OBJECT_DIRECTION_BASED_DISTRIBUTION;
103         }
104private:
[1020]105        virtual bool GenerateSample(SimpleRay &ray) const;
106};
107
108
109class DirectionBasedDistribution: public SamplingStrategy
110{
111 public:
[1771]112  DirectionBasedDistribution(const Preprocessor &preprocessor):
113        SamplingStrategy(preprocessor){
114        mType = DIRECTION_BASED_DISTRIBUTION;
115  }
116private:
117  virtual bool GenerateSample(SimpleRay &ray) const;
[1020]118};
119
120
121class DirectionBoxBasedDistribution: public SamplingStrategy
122{
123 public:
124         DirectionBoxBasedDistribution(const Preprocessor &preprocessor):
[1771]125           SamplingStrategy(preprocessor){
126           mType = DIRECTION_BOX_BASED_DISTRIBUTION;
127         }
[1020]128           
[1771]129private:
[1020]130           virtual bool GenerateSample(SimpleRay &ray) const;
131};
132
133
134class SpatialBoxBasedDistribution: public SamplingStrategy
135{
136 public:
137         SpatialBoxBasedDistribution(const Preprocessor &preprocessor):
[1771]138           SamplingStrategy(preprocessor){
[1772]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){
[1771]152           mType = SPATIAL_BOX_BASED_DISTRIBUTION;
153         }
[1020]154         
[1771]155private:
[1020]156         virtual bool GenerateSample(SimpleRay &ray) const;
157};
158
[1772]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
[1771]173class RssBasedDistribution: public SamplingStrategy
174{
175 public:
176  RssBasedDistribution(const Preprocessor &preprocessor):
177        SamplingStrategy(preprocessor){
178        mType = RSS_BASED_DISTRIBUTION;
179  }
[1020]180
[1771]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
[1772]192
[1763]193class ViewCellBorderBasedDistribution: public SamplingStrategy
194{
195 public:
[1771]196  ViewCellBorderBasedDistribution(const Preprocessor &preprocessor):
197        SamplingStrategy(preprocessor) {}
198 
199  virtual bool GenerateSample(SimpleRay &ray) const;
[1763]200};
201
[1824]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};
[1763]212
[1824]213
[1020]214/** This strategy generates samples inside of the objects, e.g.,
215        for sampling the inside of a colon.
216*/
[1021]217/*class ObjectsInteriorDistribution: public SamplingStrategy
[1020]218{
219 public:
220         ObjectsInteriorDistribution(const Preprocessor &preprocessor):
221         SamplingStrategy(preprocessor) {}
222         
223         virtual bool GenerateSample(SimpleRay &ray) const;
224};
[1021]225*/
[1020]226};
227
228#endif
Note: See TracBrowser for help on using the repository browser.