CPP-TOOLBOX
Loading...
Searching...
No Matches
transform.hpp
Go to the documentation of this file.
1#ifndef TRANSFORM_HPP
2#define TRANSFORM_HPP
3
4#include <glm/glm.hpp>
5#include <glm/gtc/matrix_transform.hpp>
6#include <glm/gtc/type_ptr.hpp>
7#include <iostream>
8
10
15
16class Transform {
17 public:
18 Transform(glm::vec3 translation = glm::vec3(0), glm::vec3 rotation = glm::vec3(0), glm::vec3 scale = glm::vec3(1),
21 : translation(translation), rotation(rotation), scale(scale),
23
25
26 void set_translation_y(const double &y);
27 void set_translation(const double &x, const double &y, const double &z);
28 void set_translation(const glm::vec3 &new_position);
29
30 void add_translation(const double &x, const double &y, const double &z);
31 void add_translation(const glm::vec3 &add_position);
32
33 void set_rotation(const glm::vec3 &pitch_yaw_roll);
34
35 void set_rotation_pitch(const double &new_pitch);
36 void set_rotation_yaw(const double &new_yaw);
37 void reset_yaw();
38 void reset_pitch();
39 void set_rotation_roll(const double &new_roll);
40
41 void add_rotation_pitch(const double &pitch);
42 void add_rotation_yaw(const double &yaw);
43 void add_rotation_roll(const double &roll);
44
45 void set_scale(const double &scale);
46 void set_scale(const double &x, const double &y, const double &z);
47 void set_scale(const glm::vec3 &new_scale);
48
49 void set_scale_x(const double &new_scale);
50 void set_scale_y(const double &new_scale);
51 void set_scale_z(const double &new_scale);
52
53 void reset();
54 void reset_scale();
55
57 glm::mat4 get_transform_matrix();
58 glm::vec3 get_rotation() const { return rotation; }
59
60 double get_rotation_pitch() const { return rotation.x; }
61 double get_rotation_yaw() const { return rotation.y; }
62 glm::mat4 get_rotation_transform_matrix() const;
63 glm::vec3 get_scale() const { return scale; }
64 glm::mat4 get_scale_transform_matrix() const;
65 glm::vec3 get_translation() const { return translation; }
66 glm::mat4 get_translation_transform_matrix() const;
67
68 void set_transform_matrix(const glm::mat4 &matrix);
69
70 glm::vec3 compute_forward_vector() const;
71 glm::vec3 compute_xz_forward_vector() const;
72 glm::vec2 compute_xz_forward_vector_R2() const;
73 glm::vec3 compute_right_vector() const;
74 glm::vec3 compute_up_vector() const;
75 std::string to_string() const;
76
77 friend std::ostream &operator<<(std::ostream &os, const Transform &transform) {
78 os << transform.to_string();
79 return os;
80 }
81
82 private:
83 glm::mat4 transform_matrix = glm::mat4(1);
84 bool transform_needs_update =
85 true; // because if you initialize and call get transform matrix the if statement shoud go through
86 void update_transform_matrix();
87
88 glm::vec3 translation; // Position in 3D space
89 glm::vec3 rotation; // Euler angles in turns (pitch, yaw, roll)
90 glm::vec3 scale; // Scale factors
91};
92
93glm::mat4 create_billboard_transform(const Transform &transform);
94glm::mat4 create_translation_and_look_transform(const glm::vec3 &position, const glm::vec3 &look_vector,
95 const glm::vec3 &up_hint = glm::vec3(0.0f, 1.0f, 0.0f));
96
97glm::mat4 change_of_basis_move_y_to_look_dir(const glm::vec3 &position, const glm::vec3 &look_vector,
98 const glm::vec3 &up_hint = glm::vec3(0.0f, 1.0f, 0.0f));
99
100glm::mat4 create_billboard_transform(const glm::vec3 &right, const glm::vec3 &up, const glm::vec3 &look);
101glm::mat4 create_billboard_transform(const glm::vec3 &look);
102glm::mat4 create_billboard_transform_with_lock_axis(const glm::vec3 &lock_axis, const glm::vec3 &look);
103
104bool angle_between_vectors_is_within(glm::vec3 v, glm::vec3 w, double turns);
105bool vector_is_within_centered_sector(glm::vec3 center, glm::vec3 other, double sector_angle_turns);
106
107#endif // TRANSFORM_HPP
Definition transform.hpp:16
void set_rotation_pitch(const double &new_pitch)
Definition transform.cpp:99
void add_translation(const double &x, const double &y, const double &z)
Definition transform.cpp:85
TransformApplicationOrder transform_application_order
Definition transform.hpp:24
void reset_scale()
Definition transform.cpp:161
void set_scale_z(const double &new_scale)
Definition transform.cpp:149
glm::vec3 get_scale() const
Definition transform.hpp:63
Transform(glm::vec3 translation=glm::vec3(0), glm::vec3 rotation=glm::vec3(0), glm::vec3 scale=glm::vec3(1), const TransformApplicationOrder &transform_application_order=TransformApplicationOrder::ScaleRotationTranslation)
Definition transform.hpp:18
glm::mat4 get_translation_transform_matrix() const
Definition transform.cpp:42
void set_scale_y(const double &new_scale)
Definition transform.cpp:144
glm::vec2 compute_xz_forward_vector_R2() const
Definition transform.cpp:221
void set_transform_matrix(const glm::mat4 &matrix)
Definition transform.cpp:168
void reset_pitch()
Definition transform.cpp:108
void reset_yaw()
Definition transform.cpp:107
glm::vec3 compute_forward_vector() const
Definition transform.cpp:205
void add_rotation_yaw(const double &yaw)
Definition transform.cpp:118
void add_rotation_roll(const double &roll)
Definition transform.cpp:122
glm::vec3 get_translation() const
Definition transform.hpp:65
glm::vec3 compute_xz_forward_vector() const
Definition transform.cpp:213
void set_rotation(const glm::vec3 &pitch_yaw_roll)
Definition transform.cpp:94
void add_rotation_pitch(const double &pitch)
Definition transform.cpp:114
glm::mat4 get_transform_matrix()
Definition transform.cpp:52
void set_translation_y(const double &y)
Definition transform.cpp:75
double get_rotation_yaw() const
Definition transform.hpp:61
void set_rotation_yaw(const double &new_yaw)
Definition transform.cpp:103
glm::vec3 compute_up_vector() const
Definition transform.cpp:235
std::string to_string() const
Definition transform.cpp:197
glm::vec3 compute_right_vector() const
Definition transform.cpp:228
glm::mat4 get_rotation_transform_matrix() const
Definition transform.cpp:16
void reset()
Definition transform.cpp:154
glm::vec3 get_rotation() const
Definition transform.hpp:58
glm::mat4 get_scale_transform_matrix() const
Definition transform.cpp:41
void set_scale_x(const double &new_scale)
Definition transform.cpp:139
Transform get_inverse_transform() const
Definition transform.cpp:44
friend std::ostream & operator<<(std::ostream &os, const Transform &transform)
Definition transform.hpp:77
void set_rotation_roll(const double &new_roll)
Definition transform.cpp:109
double get_rotation_pitch() const
Definition transform.hpp:60
void set_translation(const double &x, const double &y, const double &z)
Definition transform.cpp:77
void set_scale(const double &scale)
Definition transform.cpp:127
@ y
Definition input_state.hpp:51
@ x
Definition input_state.hpp:50
@ v
Definition input_state.hpp:48
@ w
Definition input_state.hpp:49
@ z
Definition input_state.hpp:52
Definition turns.cpp:3
glm::mat4 create_translation_and_look_transform(const glm::vec3 &position, const glm::vec3 &look_vector, const glm::vec3 &up_hint=glm::vec3(0.0f, 1.0f, 0.0f))
Definition transform.cpp:251
bool vector_is_within_centered_sector(glm::vec3 center, glm::vec3 other, double sector_angle_turns)
Definition transform.cpp:391
TransformApplicationOrder
Definition transform.hpp:11
@ ScaleRotationTranslation
Definition transform.hpp:13
@ ScaleTranslationRotation
Definition transform.hpp:12
bool angle_between_vectors_is_within(glm::vec3 v, glm::vec3 w, double turns)
Definition transform.cpp:369
glm::mat4 create_billboard_transform(const Transform &transform)
Definition transform.cpp:242
glm::mat4 change_of_basis_move_y_to_look_dir(const glm::vec3 &position, const glm::vec3 &look_vector, const glm::vec3 &up_hint=glm::vec3(0.0f, 1.0f, 0.0f))
Definition transform.cpp:269
glm::mat4 create_billboard_transform_with_lock_axis(const glm::vec3 &lock_axis, const glm::vec3 &look)
Definition transform.cpp:315