class cogs::Transform
Overview
Class used for effective management of transformation matrix by handling translation, rotation and scaling separately. More…
#include <Transform.h> class Transform { public: // construction Transform(); Transform(const glm::mat4& matrix); Transform(const std::function<void(void)>& notifier_func); Transform(const Transform&); Transform(Transform&&); virtual ~Transform(); // methods Transform& operator=(const Transform&); Transform& operator=(Transform&&); void Translate(const glm::vec3& move_vector); void SetPosition(const glm::vec3& position); const glm::vec3 GetPosition() const; void Rotate(const glm::quat& rotation); void SetRotation(const glm::quat& rotation); const glm::quat GetRotation() const; void Scale(const glm::vec3& scale); void SetScaling(const glm::vec3& scale); const glm::vec3 GetScaling() const; void Set(const glm::mat4& trans_mat); virtual const glm::mat4& GetMat4() const; void AddTransform(const Transform& transform); void InterpolateWith(const Transform& target, const float target_weight, Transform* out_transform) const; virtual void SaveToStream(std::ostream& ostr) const; virtual void LoadFromStream(std::istream& istr); Transform operator*(const Transform& t) const; operator glm::mat4() const; protected: // methods virtual void OnInvariantChange(); };
Detailed Documentation
Class used for effective management of transformation matrix by handling translation, rotation and scaling separately.
Final transformation is computed in order: scaling > rotation > translation.
Construction
Transform()
Creates an identity instance.
Transform(const glm::mat4& matrix)
Creates an instance from a given matrix.
Transform(const std::function<void(void)>& notifier_func)
Creates an identity instance which notifies whenever its state changes.
Methods
void Translate(const glm::vec3& move_vector)
Changes position by a given vector.
void SetPosition(const glm::vec3& position)
Removes current position and replaces with specified position.
const glm::vec3 GetPosition() const
Returns position defined by transformation.
void Rotate(const glm::quat& rotation)
Applies additional rotation to transform, relative to current rotation.
void SetRotation(const glm::quat& rotation)
Removes current rotation and replaces with specified quaternion.
const glm::quat GetRotation() const
Returns rotation defined by transformation.
void Scale(const glm::vec3& scale)
Applies scale to transform, accumulated with previous scaling.
void SetScaling(const glm::vec3& scale)
Resets scaling of transform.
const glm::vec3 GetScaling() const
Returns scaling defined by transformation.
void Set(const glm::mat4& trans_mat)
Resets current transform so that it represents specified matrix.
virtual const glm::mat4& GetMat4() const
Returns composed matrix of final transformation: scaling > rotation > translation.
void AddTransform(const Transform& transform)
Multiply this transform by a given one.
void InterpolateWith(const Transform& target, const float target_weight, Transform* out_transform) const
Interpolates current transform with another, in a specific mix ratio.
Transformations are disassembled into translation, scale and rotation components. Translation and scale components are then interpolated linearly, rotation with SLERP function.
Parameters:
target |
The Transform which to interpolate to. |
target_weight |
Defines how much of target should be taken. Value 0 results in 100% of this transform, value 1 results in 100% of target. |
out_transform |
A pointer to an object where the computed transformation will be stored. |
virtual void SaveToStream(std::ostream& ostr) const
Writes relevant information to stream.
virtual void LoadFromStream(std::istream& istr)
Reads relevant information from stream.
Transform operator*(const Transform& t) const
Multiply two transforms equivalently to matrix multiplication.
virtual void OnInvariantChange()
Function called each time a change on position, rotation or scaling is performed.