Wizard Engine
2D cross-platform game engine built around SDL2
 
Loading...
Searching...
No Matches
wze::camera Class Referencefinal

Static Public Member Functions

static float x ()
 
static void set_x (float x)
 
static float y ()
 
static void set_y (float y)
 
static float z ()
 
static void set_z (float z)
 
static float angle ()
 
static void set_angle (float angle)
 
static std::array< float, 4 > const & transformation_matrix ()
 
static float focus ()
 
static void set_focus (float focus)
 
static std::pair< float, float > project (float x, float y, float z)
 
static std::pair< float, float > unproject (float x, float y, float z)
 

Detailed Description

Definition at line 34 of file camera.hpp.

Member Function Documentation

◆ x()

float wze::camera::x ( )
staticnodiscard

Definition at line 36 of file camera.cpp.

36 {
37 return _x;
38}

◆ set_x()

void wze::camera::set_x ( float x)
static

Definition at line 40 of file camera.cpp.

40 {
41 _x = x;
42}

◆ y()

float wze::camera::y ( )
staticnodiscard

Definition at line 44 of file camera.cpp.

44 {
45 return _y;
46}

◆ set_y()

void wze::camera::set_y ( float y)
static

Definition at line 48 of file camera.cpp.

48 {
49 _y = y;
50}

◆ z()

float wze::camera::z ( )
staticnodiscard

Definition at line 52 of file camera.cpp.

52 {
53 return _z;
54}

◆ set_z()

void wze::camera::set_z ( float z)
static

Definition at line 56 of file camera.cpp.

56 {
57 _z = z;
58}

◆ angle()

float wze::camera::angle ( )
staticnodiscard

Definition at line 60 of file camera.cpp.

60 {
61 return _angle;
62}

◆ set_angle()

void wze::camera::set_angle ( float angle)
static

Definition at line 64 of file camera.cpp.

64 {
65 _angle = angle;
66 _transformation_matrix = math::transformation_matrix(-camera::angle(), 1);
67}
static std::array< float, 4 > transformation_matrix(float angle, float scale)
Creates a transformation matrix.
Definition math.cpp:57

◆ transformation_matrix()

std::array< float, 4 > const & wze::camera::transformation_matrix ( )
staticnodiscard

Definition at line 69 of file camera.cpp.

69 {
70 return _transformation_matrix;
71}

◆ focus()

float wze::camera::focus ( )
staticnodiscard

Definition at line 73 of file camera.cpp.

73 {
74 return _focus;
75}

◆ set_focus()

void wze::camera::set_focus ( float focus)
static

Definition at line 77 of file camera.cpp.

77 {
78 _focus = focus;
79}

◆ project()

std::pair< float, float > wze::camera::project ( float x,
float y,
float z )
staticnodiscard

Definition at line 92 of file camera.cpp.

92 {
93 float x;
94 float y;
95 float z;
96
97 if (!instance.spatial()) {
98 instance.set_screen_area(
99 {instance.x(), instance.y(), instance.width(), instance.height()});
100 instance.set_screen_angle(instance.angle());
101 return;
102 }
103
104 instance.set_screen_angle(instance.angle() - angle());
105
106 if (instance.z() == camera::z()) {
107 instance.set_screen_area({0, 0, 0, 0});
108 return;
109 }
110
111 x = instance.x() - camera::x();
112 y = instance.y() - camera::y();
113 z = instance.z() - camera::z();
114
115 if (z == focus()) {
116 instance.set_screen_area(
117 {math::transform_x(x, y, transformation_matrix()),
118 math::transform_y(x, y, transformation_matrix()), instance.width(),
119 instance.height()});
120 return;
121 }
122
123 z = focus() / z;
124 x *= z;
125 y *= z;
126 instance.set_screen_area({math::transform_x(x, y, transformation_matrix()),
127 math::transform_y(x, y, transformation_matrix()),
128 instance.width() * z, instance.height() * z});
129}
static constexpr float transform_y(float x, float y, std::array< float, 4 > const &transformation_matrix)
Transforms the y component of a vector.
Definition math.hpp:162
static constexpr float transform_x(float x, float y, std::array< float, 4 > const &transformation_matrix)
Transforms the x component of a vector.
Definition math.hpp:148

◆ unproject()

std::pair< float, float > wze::camera::unproject ( float x,
float y,
float z )
staticnodiscard

Definition at line 150 of file camera.cpp.

150 {
151 float determinant;
152
153 if (!(bool)focus()) {
154 return {0, 0};
155 }
156
157 z -= camera::z();
158 determinant =
159 transformation_matrix().at(0) * transformation_matrix().at(3) -
160 transformation_matrix().at(1) * transformation_matrix().at(2);
161
162 if (z == focus()) {
163 return {camera::x() + (x * transformation_matrix().at(3) -
164 y * transformation_matrix().at(1)) /
165 determinant,
166 camera::y() + (y * transformation_matrix().at(0) -
167 x * transformation_matrix().at(2)) /
168 determinant};
169 }
170
171 z /= focus();
172 return {camera::x() + (x * transformation_matrix().at(3) -
173 y * transformation_matrix().at(1)) /
174 determinant * z,
175 camera::y() + (y * transformation_matrix().at(0) -
176 x * transformation_matrix().at(2)) /
177 determinant * z};
178}

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