1#ifndef NNGN_MATH_CAMERA_H
2#define NNGN_MATH_CAMERA_H
70 static constexpr float NEAR = 0.01f;
72 static constexpr float FAR = 2048;
90 static constexpr float fov(
float z,
float w);
198 const auto a =
w / 2.0f / z;
199 return 2.0f * std::atan(
a);
207 this->
flags.
set(Flag::PERSPECTIVE, b);
212 this->
flags.
set(Flag::IGNORE_BOUNDS, b);
218 return ret.
xyz() / ret.
w;
223 return ret.
xyz() / ret.
w;
228 return ret.
xyz() / ret.
w;
233 return ret.
xyz() / ret.
w;
237 return static_cast<float>(this->
screen.
y)
239 / std::tan(this->
fov_y / 2);
268 this->
flags.
set(Flag::SCREEN_UPDATED);
static constexpr T pi(void)
Definition: math.h:183
std::uint8_t u8
Definition: def.h:12
set_perspective
Definition: camera.lua:41
w
Definition: strict.lua:12
Abstract orthographic/perspective camera.
Definition: camera.h:46
float fov_y
Field of view in perspective mode.
Definition: camera.h:181
void set_perspective(bool b)
Definition: camera.h:206
vec3 rot_a
Rotational acceleration.
Definition: camera.h:163
float damp
Damping factor when not accelerating.
Definition: camera.h:183
vec3 up(void) const
The "up" vector for the view direction.
Definition: camera.cpp:59
void set_fov_y(float f)
Definition: camera.h:261
void set_ignore_bounds(bool b)
Definition: camera.h:211
vec3 clip_to_view(vec3 p) const
Projects a point from clip to view space.
Definition: camera.h:226
void set_screen(uvec2 s)
Definition: camera.h:266
static constexpr float NEAR
Perspective projection near plane.
Definition: camera.h:70
bool dash(void) const
Definition: camera.h:92
float zoom_a
Scaling factor acceleration.
Definition: camera.h:173
float z_for_fov(void) const
Derives Z coordinate from camera's screen size and field of view.
Definition: camera.h:236
void set_zoom(float z)
Definition: camera.h:256
float zoom
Scaling factor.
Definition: camera.h:169
bool perspective(void) const
Definition: camera.h:202
void set_bounds(vec3 bl, vec3 tr)
Definition: camera.h:271
uvec2 screen
Screen size.
Definition: camera.h:185
vec3 a
Acceleration.
Definition: camera.h:157
mat4 view
View matrix.
Definition: camera.h:189
mat4 inv_view
Inverse matrix of view.
Definition: camera.h:193
vec3 v
Velocity.
Definition: camera.h:155
float max_rot_v
Maximum value for rot_v.
Definition: camera.h:177
float max_zoom_v
Maximum value for zoom_v.
Definition: camera.h:179
vec3 tr_bound
Top right point of the bounding box for p.
Definition: camera.h:167
static constexpr float fov(float z, float w)
Calculates field of view based on screen size and distance.
Definition: camera.h:197
vec3 view_to_clip(vec3 p) const
Projects a point from view to clip space.
Definition: camera.h:221
float zoom_v
Scaling factor velocity.
Definition: camera.h:171
vec3 rot_v
Rotational velocity.
Definition: camera.h:161
vec3 center(void) const
p added to a unit vector in the view direction.
Definition: camera.cpp:55
static constexpr float FAR
Perspective projection far plane.
Definition: camera.h:72
Flag
State flags and configuration.
Definition: camera.h:48
@ DASH
Increases the speed of displacement/rotation/etc.
Definition: camera.h:63
@ PERSPECTIVE
Chooses between orthographic/perspective mode.
Definition: camera.h:65
@ UPDATED
Parameters of the camera have changed.
Definition: camera.h:54
@ IGNORE_BOUNDS
The camera bounding box does not restrict movement when set.
Definition: camera.h:67
@ SCREEN_UPDATED
The screen size has changed.
Definition: camera.h:61
void set_pos(vec3 p)
Definition: camera.h:246
vec3 bl_bound
Bottom left point of the bounding box for p.
Definition: camera.h:165
mat4 inv_proj
Inverse matrix of proj.
Definition: camera.h:191
void set_rot(vec3 r)
Definition: camera.h:251
vec3 world_to_view(vec3 p) const
Projects a point from world to view space.
Definition: camera.h:216
vec3 view_to_world(vec3 p) const
Projects a point from view to world space.
Definition: camera.h:231
void set_dash(bool b)
Definition: camera.h:94
float max_v
Maximum value for v.
Definition: camera.h:175
vec3 rot
Rotational Euler angles (ZYX).
Definition: camera.h:159
void look_at(vec3 center, vec3 pos, vec3 up)
Definition: camera.cpp:65
vec3 p
Position.
Definition: camera.h:153
Flags< Flag > flags
Definition: camera.h:194
static constexpr float FOVY
Perspective projection field of view along the Y axis (default).
Definition: camera.h:74
float scale_for_fov(void) const
Derives orthographic scaling factor from camera parameters.
Definition: camera.h:242
mat4 proj
Projection matrix (orthographic/perspective).
Definition: camera.h:187
Wrapper for a small unsigned integral representing flags.
Definition: flags.h:18
constexpr bool is_set(AT a) const
Definition: flags.h:45
constexpr Flags & set(AT a)
Definition: flags.h:47
constexpr vec3_base< T > xyz() const
Definition: vec4.h:43
std::chrono::seconds s
Definition: timing.cpp:6