cb6d9e61d1
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2.3 KiB
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. |
|
|
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 |
|
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:
poses el centro de la camara en world coords.- Eje Y en world apunta hacia ARRIBA. La proyeccion mapea
pos.y + hha top de clip (y=+1). - Zoom multiplicativo:
zoom=2muestra la mitad del area mundial en el mismo viewport. - Rotation en radianes, sentido antihorario en world (la matriz invierte para clip).
visible_world_rectpara rotation != 0 devuelve el AABB ENVOLVENTE (no el rect rotado), util para frustum culling barato.view_proj_matrixes column-major (compatible con sokol_gfx / OpenGLglUniformMatrix4fvcontranspose=GL_FALSE).