1#ifndef LIBSBX_SCENES_COMPONENTS_TRANSFORM_HPP_
2#define LIBSBX_SCENES_COMPONENTS_TRANSFORM_HPP_
6#include <libsbx/math/vector3.hpp>
7#include <libsbx/math/matrix4x4.hpp>
8#include <libsbx/math/angle.hpp>
9#include <libsbx/math/quaternion.hpp>
18 : _position{position},
21 _rotation_matrix{_rotation.to_matrix()} { }
25 auto position()
const noexcept ->
const vector3& {
29 auto position()
noexcept ->
vector3& {
33 auto set_position(
const vector3& position)
noexcept ->
void {
37 auto move_by(
const vector3& offset)
noexcept ->
void {
41 auto rotation()
const noexcept ->
const quaternion& {
45 auto set_rotation(
const quaternion& rotation)
noexcept ->
void {
47 _rotation_matrix = _rotation.to_matrix();
52 _rotation_matrix = _rotation.to_matrix();
55 auto scale()
const noexcept ->
const vector3& {
59 auto scale()
noexcept ->
vector3& {
63 auto set_scale(
const vector3& scale)
noexcept ->
void {
67 auto forward()
const noexcept ->
vector3 {
68 return -
vector3{_rotation_matrix[2]};
71 auto right()
const noexcept ->
vector3 {
72 return vector3{_rotation_matrix[0]};
75 auto up()
const noexcept ->
vector3 {
76 return vector3{_rotation_matrix[1]};
79 auto look_at(
const vector3& target)
noexcept ->
void {
80 auto result = matrix4x4::look_at(_position, target, vector3::up);
82 _rotation_matrix = _rotation.to_matrix();
86 const auto translation = matrix4x4::translated(matrix4x4::identity, _position);
87 const auto scale = matrix4x4::scaled(matrix4x4::identity, _scale);
89 return translation * _rotation_matrix * scale;
Definition: angle.hpp:251
Definition: matrix4x4.hpp:24
Definition: quaternion.hpp:22
Definition: vector3.hpp:22