Euphoria
viewport.cc
Go to the documentation of this file.
1 #include "core/viewport.h"
2 
3 #include "base/cint.h"
4 #include "core/camera3.h"
5 
6 namespace eu::core
7 {
9  : bounds(r)
10  {
11  }
12 
13 
14  float
16  {
18  }
19 
20 
21  vec2f
23  {
24  const auto p01 = to01(bounds.to_f(), p.to_f());
25  const auto clip = from_01(Rectf::from_left_right_top_bottom(-1, 1, 1, -1), p01);
26  return clip;
27  }
28 
29 
31  (
32  const core::CompiledCamera3& camera,
33  const core::Viewport& viewport,
34  const vec2i& position
35  )
36  {
37  return camera.from_clip_to_world_ray
38  (
39  viewport.to_clip_coord
40  (
41  position
42  )
43  );
44  }
45 
46 
48  (
49  const core::CompiledCamera3& camera,
50  const core::Viewport& viewport,
51  const vec2i& position
52  )
53  {
54  const auto ray = from_mouse_to_ray(camera, viewport, position);
55  return ray.get_normalized();
56  }
57 }
UnitRay3f from_mouse_to_unit_ray(const core::CompiledCamera3 &camera, const core::Viewport &viewport, const vec2i &position)
Definition: viewport.cc:48
Ray3f from_mouse_to_ray(const core::CompiledCamera3 &camera, const core::Viewport &viewport, const vec2i &position)
Definition: viewport.cc:31
float to01(const Range< T > &range, T value)
Definition: range.h:84
constexpr float c_int_to_float(int i)
Definition: cint.h:50
float from_01(const Range< float > &range, float value)
Definition: range.cc:13
Definition: ray.h:37
static Rectf from_left_right_top_bottom(float left_side, float right_side, float top_side, float bottom_side)
Definition: rect.cc:47
Rectf to_f() const
Definition: rect.cc:501
int get_height() const
Definition: rect.cc:891
int get_width() const
Definition: rect.cc:897
Ray3f from_clip_to_world_ray(const vec2f &p) const
Definition: camera3.cc:34
Viewport(const Recti &r)
Definition: viewport.cc:8
float get_aspect_ratio() const
Definition: viewport.cc:15
vec2f to_clip_coord(const vec2i &p) const
Definition: viewport.cc:22
Definition: vec2.h:33
Definition: vec2.h:72