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

Revision 1772, 4.7 KB checked in by mattausch, 18 years ago (diff)
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,
34                REVERSE_VIEWSPACE_BORDER_BASED_DISTRIBUTION
35        };
[1520]36
[1772]37        /** Default constructor
38        */
39        SamplingStrategy(const Preprocessor &preprocessor);
[1020]40
[1772]41        virtual ~SamplingStrategy();
42
43        /** Each strategy has to implement this function.
44        @returns true if generated valid sample.
45        */
46
47        virtual int GenerateSamples(const int number, SimpleRayContainer &rays) const;
48
[1771]49private:
[1020]50
[1772]51        virtual bool GenerateSample(SimpleRay &ray) const = 0;
[1020]52
[1771]53public:
[1772]54        /// variables usefull for mixed distribution sampling
55        int mType;
56        int mRays;
57        float mContribution;
58        float mTime;
59        float mRatio;
60
[1020]61protected:
[1772]62
63        const Preprocessor &mPreprocessor;
64
[1020]65};
66
67
68class ObjectBasedDistribution: public SamplingStrategy
69{
70 public:
71       
[1771]72  ObjectBasedDistribution(const Preprocessor &preprocessor):
73        SamplingStrategy(preprocessor) {
74        mType = OBJECT_BASED_DISTRIBUTION;
75  }
[1020]76
[1771]77private:
78  virtual bool GenerateSample(SimpleRay &ray) const;
[1020]79};
80
81
[1695]82class ReverseObjectBasedDistribution: public SamplingStrategy
83{
84 public:
85       
86         ReverseObjectBasedDistribution(const Preprocessor &preprocessor):
[1771]87           SamplingStrategy(preprocessor) {
88           mType = REVERSE_OBJECT_BASED_DISTRIBUTION;
89         }
[1695]90
[1771]91private:
92  virtual bool GenerateSample(SimpleRay &ray) const;
[1695]93};
94
95
[1020]96class ObjectDirectionBasedDistribution: public SamplingStrategy
97{
98 public:
99         ObjectDirectionBasedDistribution(const Preprocessor &preprocessor):
[1771]100         SamplingStrategy(preprocessor) {
101           mType = OBJECT_DIRECTION_BASED_DISTRIBUTION;
102         }
103private:
[1020]104        virtual bool GenerateSample(SimpleRay &ray) const;
105};
106
107
108class DirectionBasedDistribution: public SamplingStrategy
109{
110 public:
[1771]111  DirectionBasedDistribution(const Preprocessor &preprocessor):
112        SamplingStrategy(preprocessor){
113        mType = DIRECTION_BASED_DISTRIBUTION;
114  }
115private:
116  virtual bool GenerateSample(SimpleRay &ray) const;
[1020]117};
118
119
120class DirectionBoxBasedDistribution: public SamplingStrategy
121{
122 public:
123         DirectionBoxBasedDistribution(const Preprocessor &preprocessor):
[1771]124           SamplingStrategy(preprocessor){
125           mType = DIRECTION_BOX_BASED_DISTRIBUTION;
126         }
[1020]127           
[1771]128private:
[1020]129           virtual bool GenerateSample(SimpleRay &ray) const;
130};
131
132
133class SpatialBoxBasedDistribution: public SamplingStrategy
134{
135 public:
136         SpatialBoxBasedDistribution(const Preprocessor &preprocessor):
[1771]137           SamplingStrategy(preprocessor){
[1772]138           mType = DIRECTION_BOX_BASED_DISTRIBUTION;
139         }
140           
141private:
142           virtual bool GenerateSample(SimpleRay &ray) const;
143};
144
145
146class ViewSpaceBorderBasedDistribution: public SamplingStrategy
147{
148 public:
149         ViewSpaceBorderBasedDistribution(const Preprocessor &preprocessor):
150           SamplingStrategy(preprocessor){
[1771]151           mType = SPATIAL_BOX_BASED_DISTRIBUTION;
152         }
[1020]153         
[1771]154private:
[1020]155         virtual bool GenerateSample(SimpleRay &ray) const;
156};
157
[1772]158
159class ReverseViewSpaceBorderBasedDistribution: public SamplingStrategy
160{
161 public:
162         ReverseViewSpaceBorderBasedDistribution(const Preprocessor &preprocessor):
163           SamplingStrategy(preprocessor){
164           mType = SPATIAL_BOX_BASED_DISTRIBUTION;
165         }
166         
167private:
168         virtual bool GenerateSample(SimpleRay &ray) const;
169};
170
171
[1771]172class RssBasedDistribution: public SamplingStrategy
173{
174 public:
175  RssBasedDistribution(const Preprocessor &preprocessor):
176        SamplingStrategy(preprocessor){
177        mType = RSS_BASED_DISTRIBUTION;
178  }
[1020]179
[1771]180
181  virtual int GenerateSamples(const int number, SimpleRayContainer &ray) const {
182        // TBD!!!
183        return 0;
184  }
185
186private:
187  virtual bool GenerateSample(SimpleRay &ray) const;
188 
189};
190
[1772]191
[1763]192class ViewCellBorderBasedDistribution: public SamplingStrategy
193{
194 public:
[1771]195  ViewCellBorderBasedDistribution(const Preprocessor &preprocessor):
196        SamplingStrategy(preprocessor) {}
197 
198  virtual bool GenerateSample(SimpleRay &ray) const;
[1763]199};
200
201
[1020]202/** This strategy generates samples inside of the objects, e.g.,
203        for sampling the inside of a colon.
204*/
[1021]205/*class ObjectsInteriorDistribution: public SamplingStrategy
[1020]206{
207 public:
208         ObjectsInteriorDistribution(const Preprocessor &preprocessor):
209         SamplingStrategy(preprocessor) {}
210         
211         virtual bool GenerateSample(SimpleRay &ray) const;
212};
[1021]213*/
[1020]214};
215
216#endif
Note: See TracBrowser for help on using the repository browser.