source: GTP/trunk/Lib/Vis/Preprocessing/src/Mutation.h @ 2060

Revision 2060, 3.0 KB checked in by bittner, 17 years ago (diff)

mutation parameters added

Line 
1#ifndef _Mutation_H__
2#define _Mutation_H__
3
4#include <vector>
5using namespace std;
6
7#include "common.h"
8#include "Halton.h"
9
10namespace GtpVisibilityPreprocessor {
11
12class Vector2;
13class Vector3;
14class VssRay;
15class Preprocessor;
16struct SimpleRay;
17class SimpleRayContainer;
18
19struct VssRayContainer;
20
21class MutationBasedDistribution: public SamplingStrategy
22{
23public:
24  MutationBasedDistribution(Preprocessor &preprocessor);
25  virtual void Update(VssRayContainer &vssRays);
26
27  virtual bool RequiresRays() { return true; }
28
29private:
30  virtual bool GenerateSample(SimpleRay &ray);
31
32  bool
33  GenerateMutation(const int index, SimpleRay &ray);
34
35  bool
36  GenerateMutationCandidate(const int index,
37                                                        SimpleRay &ray,
38                                                        Intersectable *object,
39                                                        const AxisAlignedBox3 &box
40                                                        );
41
42
43 
44  struct RayEntry {
45        // halton sequence for generatin gmutations of this ray
46        VssRay *mRay;
47        short mMutations;
48        short mUnsuccessfulMutations;
49        HaltonSequence mHalton;
50        float mImportance;
51        float mCdf;
52
53        Vector3 mutatedOrigin;
54        Vector3 mutatedTermination;
55       
56        float GetSamplingFactor() const { return mMutations/mImportance; }
57       
58        friend bool operator<(const RayEntry &a, const RayEntry &b) {
59          return a.GetSamplingFactor() > b.GetSamplingFactor();
60        }
61       
62        RayEntry() {}
63        RayEntry(VssRay *r):mRay(r),
64                                                mMutations(0),
65                                                mUnsuccessfulMutations(0),
66                                                mHalton(),
67                                                mImportance(1.0f)
68        {
69          ResetReverseMutation();
70        }
71
72        void ResetReverseMutation() {
73          mutatedOrigin = mutatedTermination = Vector3(0,0,0);
74        }
75        bool HasReverseMutation() const {
76          return !(mutatedOrigin == mutatedTermination);
77        }
78       
79        void SetReverseMutation(const Vector3 &a, const Vector3 &b) {
80          mutatedOrigin = a;
81          mutatedTermination = b;
82        }
83
84  };
85 
86
87  Vector3
88  ComputeOriginMutation(const VssRay &ray,
89                                                const Vector3 &U,
90                                                const Vector3 &V,
91                                                const Vector2 vr2,
92                                                const float radius
93                                                );
94
95  Vector3
96  ComputeTerminationMutation(const VssRay &ray,
97                                                         const Vector3 &U,
98                                                         const Vector3 &V,
99                                                         const Vector2 vr2,
100                                                         const float radius
101                                                         );
102
103
104  Vector3
105  ComputeSilhouetteTerminationMutation(const VssRay &ray,
106                                                                           const Vector3 &origin,
107                                                                           const AxisAlignedBox3 &box,
108                                                                           const Vector3 &U,
109                                                                           const Vector3 &V,
110                                                                           const float radius
111                                                                           );
112
113
114  bool
115  ComputeReverseMutation(
116                                                 const VssRay &oldRay,
117                                                 const VssRay &newRay,
118                                                 Vector3 &origin,
119                                                 Vector3 &termination
120                                                 );
121
122  RayEntry &GetEntry(const int index);
123
124 
125  vector<RayEntry> mRays;
126  int mBufferStart;
127  int mLastIndex;
128
129
130  int mMaxRays;
131  float mMutationRadiusOrigin;
132  float mMutationRadiusTermination;
133  bool mUseReverseSamples;
134  float mReverseSamplesDistance;
135  bool mUseSilhouetteSamples;
136  int mSilhouetteSearchSteps;
137  float mSilhouetteProb;
138  bool mUsePassImportance;
139  bool mUseUnsuccCountImportance;
140
141};
142
143
144}
145
146#endif
147
Note: See TracBrowser for help on using the repository browser.