82 lines
1.6 KiB
C++
82 lines
1.6 KiB
C++
|
|
#ifndef SPECTRE_MATH_TRANSFORM_H
|
|
#define SPECTRE_MATH_TRANSFORM_H
|
|
|
|
#include "Vector2.h"
|
|
#include "Matrix4.h"
|
|
|
|
namespace sp {
|
|
|
|
// Class representing a transformation matrix.
|
|
|
|
class Transform
|
|
{
|
|
public :
|
|
|
|
// Constructors
|
|
Transform();
|
|
|
|
Transform(const Matrix4f& matrix);
|
|
|
|
Transform(float a00, float a01, float a02,
|
|
float a10, float a11, float a12,
|
|
float a20, float a21, float a22);
|
|
|
|
// Shorthand for applying translate/rotate/scale.
|
|
// Order of operations:
|
|
// 1. translate
|
|
// 2. rotate
|
|
// 3. scale
|
|
void set(Vector2f translate, float rotate, Vector2f scale);
|
|
|
|
void setMatrix(const Matrix4f& matrix);
|
|
|
|
// Reset the transformation (Identity matrix).
|
|
void reset();
|
|
|
|
// Axis.
|
|
Vector2f getUpVector() const;
|
|
Vector2f getRightVector() const;
|
|
|
|
// Translation
|
|
|
|
Transform& translate(float x, float y);
|
|
Transform& translate(Vector2f offset);
|
|
|
|
// Rotation
|
|
|
|
Transform& rotate(float theta);
|
|
|
|
// Scale
|
|
|
|
Transform& scale(float x, float y);
|
|
Transform& scale(Vector2f offset);
|
|
Transform& scale(float s);
|
|
|
|
Transform& combine(const Transform& other);
|
|
|
|
Vector2f transformPoint(float x, float y) const;
|
|
|
|
Vector2f transformPoint(const Vector2f& v) const;
|
|
|
|
// Get the transformation as a 4x4 matrix.
|
|
Matrix4f& getMatrix();
|
|
const Matrix4f& getMatrix() const;
|
|
|
|
Matrix4f getRotationMatrix() const;
|
|
|
|
float* getRawMatrix();
|
|
const float* getRawMatrix() const;
|
|
|
|
protected :
|
|
Matrix4f m_matrix;
|
|
};
|
|
|
|
Transform operator*(const Transform& a, const Transform& b);
|
|
Transform& operator*=(Transform& a, const Transform& b);
|
|
|
|
Vector2f operator*(const Transform& t, const Vector2f& v);
|
|
|
|
} // namespace sp
|
|
|
|
#endif /* SPECTRE_MATH_TRANSFORM_H */
|