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(
119 instance.height()});
120 return;
121 }
122
123 z = focus() / z;
124 x *= z;
125 y *= z;
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.
static constexpr float transform_x(float x, float y, std::array< float, 4 > const &transformation_matrix)
Transforms the x component of a vector.