Loading...
Searching...
No Matches
sf::Transform Class Reference

3x3 transform matrix More...

#include <SFML/Graphics/Transform.hpp>

Public Member Functions

constexpr Transform ()=default
 Default constructor.
 
constexpr 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.
 
constexpr const float * getMatrix () const
 Return the transform as a 4x4 matrix.
 
constexpr Transform getInverse () const
 Return the inverse of the transform.
 
constexpr Vector2f transformPoint (Vector2f point) const
 Transform a 2D point.
 
constexpr FloatRect transformRect (const FloatRect &rectangle) const
 Transform a rectangle.
 
constexpr Transformcombine (const Transform &transform)
 Combine the current transform with another one.
 
constexpr Transformtranslate (Vector2f offset)
 Combine the current transform with a translation.
 
Transformrotate (Angle angle)
 Combine the current transform with a rotation.
 
Transformrotate (Angle angle, Vector2f center)
 Combine the current transform with a rotation.
 
constexpr Transformscale (Vector2f factors)
 Combine the current transform with a scaling.
 
constexpr Transformscale (Vector2f factors, Vector2f center)
 Combine the current transform with a scaling.
 

Static Public Attributes

static const Transform Identity
 The identity transform (does nothing)
 

Related Symbols

(Note that these are not member symbols.)

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

Detailed Description

3x3 transform matrix

A sf::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
sf::Transform translation;
translation.translate(20, 50);
// define a rotation transform
sf::Transform rotation;
rotation.rotate(45);
// combine them
sf::Transform transform = translation * rotation;
// use the result to transform stuff...
sf::Vector2f point = transform.transformPoint({10, 20});
sf::FloatRect rect = transform.transformRect(sf::FloatRect({0, 0}, {10, 100}));
3x3 transform matrix
Definition Transform.hpp:48
constexpr Vector2f transformPoint(Vector2f point) const
Transform a 2D point.
Transform & rotate(Angle angle)
Combine the current transform with a rotation.
constexpr FloatRect transformRect(const FloatRect &rectangle) const
Transform a rectangle.
constexpr Transform & translate(Vector2f offset)
Combine the current transform with a translation.
See also
sf::Transformable, sf::RenderStates

Definition at line 47 of file Transform.hpp.

Constructor & Destructor Documentation

◆ Transform() [1/2]

constexpr sf::Transform::Transform ( )
constexprdefault

Default constructor.

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

◆ Transform() [2/2]

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

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

◆ combine()

constexpr Transform & sf::Transform::combine ( const Transform transform)
constexpr

Combine the current transform with another one.

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

These two statements are equivalent:

left.combine(right);
left *= right;
Parameters
transformTransform to combine with this transform
Returns
Reference to *this

◆ getInverse()

constexpr Transform sf::Transform::getInverse ( ) const
constexpr

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

◆ getMatrix()

constexpr const float * sf::Transform::getMatrix ( ) const
constexpr

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.

sf::Transform transform = ...;
glLoadMatrixf(transform.getMatrix());
constexpr const float * getMatrix() const
Return the transform as a 4x4 matrix.
Returns
Pointer to a 4x4 matrix

◆ rotate() [1/2]

Transform & sf::Transform::rotate ( Angle  angle)

Combine the current transform with a rotation.

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

sf::Transform transform;
transform.rotate(sf::degrees(90)).translate(50, 20);
constexpr Angle degrees(float angle)
Construct an angle value from a number of degrees.
Parameters
angleRotation angle
Returns
Reference to *this
See also
translate, scale

◆ rotate() [2/2]

Transform & sf::Transform::rotate ( Angle  angle,
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.

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

◆ scale() [1/2]

constexpr Transform & sf::Transform::scale ( Vector2f  factors)
constexpr

Combine the current transform with a scaling.

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

sf::Transform transform;
transform.scale(sf::Vector2f(2, 1)).rotate(sf::degrees(45));
constexpr Transform & scale(Vector2f factors)
Combine the current transform with a scaling.
Parameters
factorsScaling factors
Returns
Reference to *this
See also
translate, rotate

◆ scale() [2/2]

constexpr Transform & sf::Transform::scale ( Vector2f  factors,
Vector2f  center 
)
constexpr

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.

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

◆ transformPoint()

constexpr Vector2f sf::Transform::transformPoint ( Vector2f  point) const
constexpr

Transform a 2D point.

These two statements are equivalent:

sf::Vector2f transformedPoint = matrix.transformPoint(point);
sf::Vector2f transformedPoint = matrix * point;
Parameters
pointPoint to transform
Returns
Transformed point

◆ transformRect()

constexpr FloatRect sf::Transform::transformRect ( const FloatRect rectangle) const
constexpr

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

◆ translate()

constexpr Transform & sf::Transform::translate ( Vector2f  offset)
constexpr

Combine the current transform with a translation.

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

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

Friends And Related Symbol Documentation

◆ operator!=()

constexpr bool operator!= ( const Transform left,
const Transform right 
)
related

Overload of binary operator!= to compare two transforms.

This call is equivalent to !(left == right).

Parameters
leftLeft operand (the first transform)
rightRight operand (the second transform)
Returns
true if the transforms are not equal, false otherwise

◆ operator*() [1/2]

constexpr 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

◆ operator*() [2/2]

constexpr Vector2f operator* ( const Transform left,
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

◆ operator*=()

constexpr 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

◆ operator==()

constexpr bool operator== ( const Transform left,
const Transform right 
)
related

Overload of binary operator== to compare two transforms.

Performs an element-wise comparison of the elements of the left transform with the elements of the right transform.

Parameters
leftLeft operand (the first transform)
rightRight operand (the second transform)
Returns
true if the transforms are equal, false otherwise

Member Data Documentation

◆ Identity

const Transform sf::Transform::Identity
static

The identity transform (does nothing)

Definition at line 265 of file Transform.hpp.


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