When writing the X11 (linux) implementation there was a problem with X11 defining a "Display" type and we also have a Display class in the engine. So to fix that problem and minimize the risk for running into other name conflicts. We move everything from global namespace.
82 lines
No EOL
1.6 KiB
C++
82 lines
No EOL
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& multiply(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 */ |