20 #if !defined(__MITSUBA_BIDIR_MANIFOLD_H_)
21 #define __MITSUBA_BIDIR_MANIFOLD_H_
25 #define MTS_MANIFOLD_DEBUG 0
26 #define MTS_MANIFOLD_EPSILON Epsilon
27 #define MTS_MANIFOLD_MAX_ITERATIONS 20
44 bool init(
const Path &path,
int start,
int end);
50 bool update(
Path &path,
int start,
int end);
53 bool move(
const Point &target,
const Normal &normal);
65 Float multiG(
const Path &path,
int a,
int b);
114 Matrix2x2 a, b, c, u;
120 inline SimpleVertex(EType type,
const Point &p) :
121 degenerate(false), type(type), p(p), dpdu(0.0f),
122 dpdv(0.0f), n(0.0f), dndu(0.0f), dndv(0.0f),
123 m(0.0f), eta(1.0f), object(NULL) { }
128 return T.x * dpdu + T.y * dpdv;
131 std::string toString()
const;
135 bool project(
const Vector &d);
141 bool computeTangents();
143 void check(SimpleVertex *v);
Three-dimensional normal data structure.
Definition: normal.h:39
int getIterationCount() const
Return the number of iterations used by move()
Definition: manifold.h:70
Float m_time
Definition: manifold.h:146
Principal scene data structure.
Definition: scene.h:49
Bidirectional path data structure.
Definition: path.h:46
T det(const TVector2< T > &v1, const TVector2< T > &v2)
Definition: vector.h:411
Utility class for perturbing paths located on a specular manifold.
Definition: manifold.h:35
const Scene * m_scene
Definition: manifold.h:145
int m_maxIterations
Definition: manifold.h:147
TVector2< Float > Vector2
Definition: fwd.h:106
#define MTS_DECLARE_CLASS()
This macro must be used in the initial definition in classes that derive from Object.
Definition: class.h:158
std::vector< SimpleVertex > m_vertices
Definition: manifold.h:149
const Point & getPosition(int i)
Return the position of a vertex.
Definition: manifold.h:73
Parent of all Mitsuba classes.
Definition: object.h:38
virtual std::string toString() const
Return a human-readable string representation of the object's contents.