Public Member Functions | Static Public Attributes | Related Functions | List of all members
cpp3ds::Transform Class Reference

Define a 3x3 transform matrix. More...

#include <Transform.hpp>

Public Member Functions

 Transform ()
 Default constructor. More...
 
 Transform (float a00, float a01, float a02, float a10, float a11, float a12, float a20, float a21, float a22)
 Construct a transform from a 3x3 matrix. More...
 
const float * getMatrix () const
 Return the transform as a 4x4 matrix. More...
 
Transform getInverse () const
 Return the inverse of the transform. More...
 
Vector2f transformPoint (float x, float y) const
 Transform a 2D point. More...
 
Vector2f transformPoint (const Vector2f &point) const
 Transform a 2D point. More...
 
FloatRect transformRect (const FloatRect &rectangle) const
 Transform a rectangle. More...
 
Transformcombine (const Transform &transform)
 Combine the current transform with another one. More...
 
Transformtranslate (float x, float y)
 Combine the current transform with a translation. More...
 
Transformtranslate (const Vector2f &offset)
 Combine the current transform with a translation. More...
 
Transformrotate (float angle)
 Combine the current transform with a rotation. More...
 
Transformrotate (float angle, float centerX, float centerY)
 Combine the current transform with a rotation. More...
 
Transformrotate (float angle, const Vector2f &center)
 Combine the current transform with a rotation. More...
 
Transformscale (float scaleX, float scaleY)
 Combine the current transform with a scaling. More...
 
Transformscale (float scaleX, float scaleY, float centerX, float centerY)
 Combine the current transform with a scaling. More...
 
Transformscale (const Vector2f &factors)
 Combine the current transform with a scaling. More...
 
Transformscale (const Vector2f &factors, const Vector2f &center)
 Combine the current transform with a scaling. More...
 

Static Public Attributes

static const Transform Identity
 The identity transform (does nothing) More...
 

Related Functions

(Note that these are not member functions.)

Transform operator* (const Transform &left, const Transform &right)
 Overload of binary operator * to combine two transforms. More...
 
Transformoperator*= (Transform &left, const Transform &right)
 Overload of binary operator *= to combine two transforms. More...
 
Vector2f operator* (const Transform &left, const Vector2f &right)
 Overload of binary operator * to transform a point. More...
 

Detailed Description

Define a 3x3 transform matrix.

A cpp3ds::Transform specifies how to translate, rotate, scale, shear, project, whatever things.

In mathematical terms, it defines how to transform a coordinate system into another.

For example, if you apply a rotation transform to a sprite, the result will be a rotated sprite. And anything that is transformed by this rotation transform will be rotated the same way, according to its initial position.

Transforms are typically used for drawing. But they can also be used for any computation that requires to transform points between the local and global coordinate systems of an entity (like collision detection).

Example:

// define a translation transform
cpp3ds::Transform translation;
translation.translate(20, 50);
// define a rotation transform
rotation.rotate(45);
// combine them
cpp3ds::Transform transform = translation * rotation;
// use the result to transform stuff...
cpp3ds::Vector2f point = transform.transformPoint(10, 20);
cpp3ds::FloatRect rect = transform.transformRect(cpp3ds::FloatRect(0, 0, 10, 100));
See also
cpp3ds::Transformable, cpp3ds::RenderStates

Definition at line 41 of file Transform.hpp.

Constructor & Destructor Documentation

cpp3ds::Transform::Transform ( )

Default constructor.

Creates an identity transform (a transform that does nothing).

cpp3ds::Transform::Transform ( float  a00,
float  a01,
float  a02,
float  a10,
float  a11,
float  a12,
float  a20,
float  a21,
float  a22 
)

Construct a transform from a 3x3 matrix.

Parameters
a00Element (0, 0) of the matrix
a01Element (0, 1) of the matrix
a02Element (0, 2) of the matrix
a10Element (1, 0) of the matrix
a11Element (1, 1) of the matrix
a12Element (1, 2) of the matrix
a20Element (2, 0) of the matrix
a21Element (2, 1) of the matrix
a22Element (2, 2) of the matrix

Member Function Documentation

Transform& cpp3ds::Transform::combine ( const Transform transform)

Combine the current transform with another one.

The result is a transform that is equivalent to applying *this followed by transform. Mathematically, it is equivalent to a matrix multiplication.

Parameters
transformTransform to combine with this transform
Returns
Reference to *this
Transform cpp3ds::Transform::getInverse ( ) const

Return the inverse of the transform.

If the inverse cannot be computed, an identity transform is returned.

Returns
A new transform which is the inverse of self
const float* cpp3ds::Transform::getMatrix ( ) const

Return the transform as a 4x4 matrix.

This function returns a pointer to an array of 16 floats containing the transform elements as a 4x4 matrix, which is directly compatible with OpenGL functions.

cpp3ds::Transform transform = ...;
glLoadMatrixf(transform.getMatrix());
Returns
Pointer to a 4x4 matrix
Transform& cpp3ds::Transform::rotate ( float  angle)

Combine the current transform with a rotation.

This function returns a reference to *this, so that calls can be chained.

transform.rotate(90).translate(50, 20);
Parameters
angleRotation angle, in degrees
Returns
Reference to *this
See also
translate, scale
Transform& cpp3ds::Transform::rotate ( float  angle,
float  centerX,
float  centerY 
)

Combine the current transform with a rotation.

The center of rotation is provided for convenience as a second argument, so that you can build rotations around arbitrary points more easily (and efficiently) than the usual translate(-center).rotate(angle).translate(center).

This function returns a reference to *this, so that calls can be chained.

transform.rotate(90, 8, 3).translate(50, 20);
Parameters
angleRotation angle, in degrees
centerXX coordinate of the center of rotation
centerYY coordinate of the center of rotation
Returns
Reference to *this
See also
translate, scale
Transform& cpp3ds::Transform::rotate ( float  angle,
const Vector2f center 
)

Combine the current transform with a rotation.

The center of rotation is provided for convenience as a second argument, so that you can build rotations around arbitrary points more easily (and efficiently) than the usual translate(-center).rotate(angle).translate(center).

This function returns a reference to *this, so that calls can be chained.

transform.rotate(90, cpp3ds::Vector2f(8, 3)).translate(cpp3ds::Vector2f(50, 20));
Parameters
angleRotation angle, in degrees
centerCenter of rotation
Returns
Reference to *this
See also
translate, scale
Transform& cpp3ds::Transform::scale ( float  scaleX,
float  scaleY 
)

Combine the current transform with a scaling.

This function returns a reference to *this, so that calls can be chained.

transform.scale(2, 1).rotate(45);
Parameters
scaleXScaling factor on the X axis
scaleYScaling factor on the Y axis
Returns
Reference to *this
See also
translate, rotate
Transform& cpp3ds::Transform::scale ( float  scaleX,
float  scaleY,
float  centerX,
float  centerY 
)

Combine the current transform with a scaling.

The center of scaling is provided for convenience as a second argument, so that you can build scaling around arbitrary points more easily (and efficiently) than the usual translate(-center).scale(factors).translate(center).

This function returns a reference to *this, so that calls can be chained.

transform.scale(2, 1, 8, 3).rotate(45);
Parameters
scaleXScaling factor on X axis
scaleYScaling factor on Y axis
centerXX coordinate of the center of scaling
centerYY coordinate of the center of scaling
Returns
Reference to *this
See also
translate, rotate
Transform& cpp3ds::Transform::scale ( const Vector2f factors)

Combine the current transform with a scaling.

This function returns a reference to *this, so that calls can be chained.

transform.scale(cpp3ds::Vector2f(2, 1)).rotate(45);
Parameters
factorsScaling factors
Returns
Reference to *this
See also
translate, rotate
Transform& cpp3ds::Transform::scale ( const Vector2f factors,
const Vector2f center 
)

Combine the current transform with a scaling.

The center of scaling is provided for convenience as a second argument, so that you can build scaling around arbitrary points more easily (and efficiently) than the usual translate(-center).scale(factors).translate(center).

This function returns a reference to *this, so that calls can be chained.

transform.scale(cpp3ds::Vector2f(2, 1), cpp3ds::Vector2f(8, 3)).rotate(45);
Parameters
factorsScaling factors
centerCenter of scaling
Returns
Reference to *this
See also
translate, rotate
Vector2f cpp3ds::Transform::transformPoint ( float  x,
float  y 
) const

Transform a 2D point.

Parameters
xX coordinate of the point to transform
yY coordinate of the point to transform
Returns
Transformed point
Vector2f cpp3ds::Transform::transformPoint ( const Vector2f point) const

Transform a 2D point.

Parameters
pointPoint to transform
Returns
Transformed point
FloatRect cpp3ds::Transform::transformRect ( const FloatRect rectangle) const

Transform a rectangle.

Since SFML doesn't provide support for oriented rectangles, the result of this function is always an axis-aligned rectangle. Which means that if the transform contains a rotation, the bounding rectangle of the transformed rectangle is returned.

Parameters
rectangleRectangle to transform
Returns
Transformed rectangle
Transform& cpp3ds::Transform::translate ( float  x,
float  y 
)

Combine the current transform with a translation.

This function returns a reference to *this, so that calls can be chained.

transform.translate(100, 200).rotate(45);
Parameters
xOffset to apply on X axis
yOffset to apply on Y axis
Returns
Reference to *this
See also
rotate, scale
Transform& cpp3ds::Transform::translate ( const Vector2f offset)

Combine the current transform with a translation.

This function returns a reference to *this, so that calls can be chained.

transform.translate(cpp3ds::Vector2f(100, 200)).rotate(45);
Parameters
offsetTranslation offset to apply
Returns
Reference to *this
See also
rotate, scale

Friends And Related Function Documentation

Transform operator* ( const Transform left,
const Transform right 
)
related

Overload of binary operator * to combine two transforms.

This call is equivalent to calling Transform(left).combine(right).

Parameters
leftLeft operand (the first transform)
rightRight operand (the second transform)
Returns
New combined transform
Vector2f operator* ( const Transform left,
const Vector2f right 
)
related

Overload of binary operator * to transform a point.

This call is equivalent to calling left.transformPoint(right).

Parameters
leftLeft operand (the transform)
rightRight operand (the point to transform)
Returns
New transformed point
Transform & operator*= ( Transform left,
const Transform right 
)
related

Overload of binary operator *= to combine two transforms.

This call is equivalent to calling left.combine(right).

Parameters
leftLeft operand (the first transform)
rightRight operand (the second transform)
Returns
The combined transform

Member Data Documentation

const Transform cpp3ds::Transform::Identity
static

The identity transform (does nothing)

Definition at line 353 of file Transform.hpp.


The documentation for this class was generated from the following file: