24 #ifndef MT_TRANSFORM_H
25 #define MT_TRANSFORM_H
91 const Point3& translation);
108 bool operator==(
const Transform& t)
const;
110 bool operator!=(
const Transform& t)
const;
123 Point3& getTranslationRef();
124 const Point3& getTranslationRef()
const;
129 const Rotation& getRotationRef()
const;
163 std::ostream& operator<<(std::ostream& os,
194 const Point3& translation) :
196 m_rotation(rotation),
197 m_translation(translation) {}
204 m_translation += (m_rotation(t.m_translation));
205 m_rotation *= t.m_rotation;
212 return Point3(m_rotation(p) + m_translation);
216 inline bool Transform::operator==(
const Transform& t)
const
223 inline bool Transform::operator!=(
const Transform& t)
const
225 return !(*
this == t);
235 return Transform(inv, inv(-m_translation));
244 return m_translation;
248 inline Point3& Transform::getTranslationRef()
250 return m_translation;
254 inline const Point3& Transform::getTranslationRef()
const
256 return m_translation;
266 inline Rotation& Transform::getRotationRef()
272 inline const Rotation& Transform::getRotationRef()
const
280 m_translation = translation;
286 m_rotation = rotation;
292 m_rotation.
setValue(Scalar(0.0), Scalar(0.0), Scalar(0.0), Scalar(1.0));
293 m_translation.
setValue(Scalar(0.0), Scalar(0.0), Scalar(0.0));
308 inline Transform operator*(
const Transform& t1,
311 const Rotation rotation (t1.getRotation() * t2.getRotation());
312 const Point3 translation (t1 * t2.getTranslation());
314 return Transform(rotation, translation);
318 inline std::ostream& operator<<(std::ostream& os,
321 return os <<
"Rotation: " << t.getRotation() <<
"\n"
322 <<
"Translation: " << t.getTranslation();
328 inline Transform interpolate(
const Transform& t1,
332 const Point3 p = lerp(t1.getTranslation(),
336 const Rotation r = slerp(t1.getRotation(),
340 return Transform(r, p);
344 inline Transform inverse(
const Transform& t)
351 #endif // MT_TRANSFORM_H