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

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

merge, global lines, rss sampling updates

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