round camera xforms

This commit is contained in:
jacob 2025-07-23 15:31:45 -05:00
parent e52470951a
commit 6bb1c07a94
2 changed files with 9 additions and 25 deletions

View File

@ -100,7 +100,7 @@ SH_ENTRY(ROOTSIG) void cs(struct cs_input input)
color *= albedo_tex[id];
/* Apply lighting */
// color.rgb *= get_light_at_pos(id);
color.rgb *= get_light_at_pos(id);
/* Apply temporal accumulation */
float hysterisis = 0;

View File

@ -888,6 +888,7 @@ INTERNAL void user_update(struct sys_window *window)
if (G.debug_camera) {
G.ui_size = G.screen_size;
G.ui_to_screen_xf = XFORM_IDENT;
G.ui_to_screen_xf.og = v2_round(G.ui_to_screen_xf.og);
} else {
/* Determine ui size by camera & window dimensions */
f32 aspect_ratio = (f32)(DEFAULT_CAMERA_WIDTH / DEFAULT_CAMERA_HEIGHT);
@ -911,6 +912,7 @@ INTERNAL void user_update(struct sys_window *window)
f32 x = math_round(G.screen_size.x / 2 - width / 2);
f32 y = math_round(G.screen_size.y / 2 - height / 2);
G.ui_to_screen_xf = XFORM_TRS(.t = V2(x, y));
G.ui_to_screen_xf.og = v2_round(G.ui_to_screen_xf.og);
}
G.ui_cursor = xform_mul_v2(xform_invert(G.ui_to_screen_xf), G.screen_cursor);
@ -948,6 +950,7 @@ INTERNAL void user_update(struct sys_window *window)
G.world_to_ui_xf = xform_scaled(G.world_to_ui_xf, V2(zoom, zoom));
G.world_to_ui_xf = xform_translated(G.world_to_ui_xf, v2_neg(world_cursor));
}
G.world_to_ui_xf.og = v2_round(G.world_to_ui_xf.og);
} else {
struct xform xf = sim_ent_get_xform(local_camera);
@ -975,23 +978,16 @@ INTERNAL void user_update(struct sys_window *window)
G.world_to_ui_xf = xform_rotated(G.world_to_ui_xf, trs.r);
G.world_to_ui_xf = xform_scaled(G.world_to_ui_xf, trs.s);
G.world_to_ui_xf = xform_translated(G.world_to_ui_xf, v2_neg(pivot));
G.world_to_ui_xf.og = v2_round(G.world_to_ui_xf.og);
}
G.world_cursor = xform_invert_mul_v2(G.world_to_ui_xf, G.ui_cursor);
/* ========================== *
* Update world to render xform from camera
* Update world to render xform from world to ui xform
* ========================== */
//DEBUGBREAKABLE;
/* FIXME:
* At 180p & 360p, objects increment in uniform but grid does not.
* At 270p, grid increments in uniform but objects do not */
//G.render_vis_size = V2(320, 180);
//G.render_vis_size = V2(480, 270);
G.render_vis_size = V2(640, 360);
G.render_size = G.render_vis_size;
G.render_size.x += RENDER_MARGIN;
G.render_size.y += RENDER_MARGIN;
@ -1000,25 +996,12 @@ INTERNAL void user_update(struct sys_window *window)
struct xform ui_to_world_xf = xform_invert(G.world_to_ui_xf);
struct v2 world_center = xform_mul_v2(ui_to_world_xf, v2_mul(G.ui_size, 0.5));
//world_center = v2_sub(world_center, V2(1, 1));
/* Scale view into viewport based on camera size */
//struct v2 scale = v2_div_v2(G.render_size, G.ui_size);
struct v2 scale = ZI;
//scale = v2_mul(G.render_size, IMAGE_PIXELS_PER_UNIT);
//scale = V2(IMAGE_PIXELS_PER_UNIT, IMAGE_PIXELS_PER_UNIT);
//scale = v2_div_v2(V2(1, 1), scale);
#if 0
scale = xform_get_scale(G.world_to_ui_xf);
#elif 1
struct v2 vis_scale = v2_div_v2(G.render_vis_size, G.render_size);
vis_scale.x = min_f32(vis_scale.x, vis_scale.y);
vis_scale.y = vis_scale.x;
scale = V2(IMAGE_PIXELS_PER_UNIT, IMAGE_PIXELS_PER_UNIT);
struct v2 scale = V2(IMAGE_PIXELS_PER_UNIT, IMAGE_PIXELS_PER_UNIT);
scale = v2_mul_v2(scale, vis_scale);
#endif
struct xform xf = XFORM_IDENT;
@ -1027,6 +1010,7 @@ INTERNAL void user_update(struct sys_window *window)
xf = xform_scaled(xf, scale);
xf = xform_translated(xf, v2_mul(world_center, -1));
xf.og = v2_round(xf.og);
G.world_to_render_xf = xf;
}
@ -1060,7 +1044,7 @@ INTERNAL void user_update(struct sys_window *window)
* ========================== */
{
f32 thickness = 1;
f32 thickness = 2;
struct v2 offset = v2_neg(xform_mul_v2(G.world_to_render_xf, V2(0, 0)));
f32 spacing = xform_get_scale(G.world_to_render_xf).x;