Files

2.3 KiB

name, kind, lang, domain, version, purity, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, example, tested, tests, test_file_path, file_path, params, output
name kind lang domain version purity signature description tags uses_functions uses_types returns returns_optional error_type imports example tested tests test_file_path file_path params output
camera_2d function cpp gamedev 0.1.0 pure world_to_screen(Camera2D, Vec2) -> Vec2; screen_to_world(Camera2D, Vec2) -> Vec2; visible_world_rect(Camera2D) -> Rect; view_proj_matrix(Camera2D, float[16]) Camara ortografica 2D pura: pos (centro), zoom, rotacion (rad) y viewport en pixeles. Conversiones world<->screen, AABB visible y matriz view-projection 4x4 column-major lista para cualquier renderer (sokol_gfx, OpenGL, WebGPU). Fast-path sin trig si rotation==0. Issue 0072b.
gamedev
camera
2d
math
pure
Vec2_cpp_core
Rect_cpp_core
false
fn::cam::Camera2D cam; cam.pos = {100, 50}; cam.zoom = 2.0f; cam.viewport_w = 1280; cam.viewport_h = 720; // mouse picking: fn::math2d::Vec2 world = fn::cam::screen_to_world(cam, {input.mx, input.my}); // upload to shader: float mvp[16]; fn::cam::view_proj_matrix(cam, mvp); false
cpp/functions/gamedev/camera_2d.cpp
name desc
camera Camera2D con pos (centro mundo), zoom (>1 acerca), rotation (radianes) y viewport_w/h (pixeles).
name desc
world Punto en world space (Vec2) para world_to_screen.
name desc
screen Punto en screen/pixel space (Vec2) para screen_to_world.
name desc
out Buffer de 16 floats donde escribir la matriz column-major en view_proj_matrix.
Vec2 (transformaciones), Rect (AABB visible) o matriz column-major 4x4 (mapa world->clip [-1,1]).

camera_2d

Camara 2D minima y pura. Zero estado global, zero I/O — apta para reusar en N renderers (sokol_gfx, OpenGL, WebGPU) y para correr en tests headless.

Convencion:

  • pos es el centro de la camara en world coords.
  • Eje Y en world apunta hacia ARRIBA. La proyeccion mapea pos.y + hh a top de clip (y=+1).
  • Zoom multiplicativo: zoom=2 muestra la mitad del area mundial en el mismo viewport.
  • Rotation en radianes, sentido antihorario en world (la matriz invierte para clip).
  • visible_world_rect para rotation != 0 devuelve el AABB ENVOLVENTE (no el rect rotado), util para frustum culling barato.
  • view_proj_matrix es column-major (compatible con sokol_gfx / OpenGL glUniformMatrix4fv con transpose=GL_FALSE).