Files
fn_registry/cpp/functions/gamedev/camera_2d.h
T

26 lines
838 B
C++

#pragma once
// camera_2d — pure orthographic 2D camera (issue 0072b).
// No state, no I/O. World <-> screen transforms + ortho view-projection matrix.
#include "../core/math2d.h"
namespace fn::cam {
struct Camera2D {
fn::math2d::Vec2 pos = {0.0f, 0.0f}; // world position of camera center
float zoom = 1.0f; // 1 = no zoom; >1 zoom in
float rotation = 0.0f; // radians
int viewport_w = 1280;
int viewport_h = 720;
};
fn::math2d::Vec2 world_to_screen(const Camera2D& c, fn::math2d::Vec2 world);
fn::math2d::Vec2 screen_to_world(const Camera2D& c, fn::math2d::Vec2 screen);
fn::math2d::Rect visible_world_rect(const Camera2D& c);
// Column-major 4x4 view-projection matrix (orthographic).
void view_proj_matrix(const Camera2D& c, float out[16]);
} // namespace fn::cam