Skip to content

Commit 499eccd

Browse files
gdtknightclaude
andcommitted
fix(input): use camera-relative up vector for vertical movement
Q/Z keys now move along the camera's local up axis (cross product of right and direction) instead of the fixed world Y axis. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 43ee40a commit 499eccd

1 file changed

Lines changed: 6 additions & 5 deletions

File tree

src/input/input_camera.c

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,14 @@ static void camera_rebuild_dir(t_camera *cam)
3737
void handle_camera_move(t_render *render, int keycode)
3838
{
3939
t_vec3 right;
40+
t_vec3 up;
4041
t_vec3 move;
4142
double step;
4243

4344
step = 1.0;
44-
right.x = -cos(render->scene->camera.yaw);
45-
right.y = 0;
46-
right.z = sin(render->scene->camera.yaw);
45+
right = (t_vec3){-cos(render->scene->camera.yaw), 0,
46+
sin(render->scene->camera.yaw)};
47+
up = vec3_normalize(vec3_cross(right, render->scene->camera.direction));
4748
if (keycode == KEY_W)
4849
move = vec3_multiply(render->scene->camera.direction, step);
4950
else if (keycode == KEY_X)
@@ -53,9 +54,9 @@ void handle_camera_move(t_render *render, int keycode)
5354
else if (keycode == KEY_D)
5455
move = vec3_multiply(right, step);
5556
else if (keycode == KEY_Q)
56-
move = (t_vec3){0, step, 0};
57+
move = vec3_multiply(up, step);
5758
else if (keycode == KEY_Z)
58-
move = (t_vec3){0, -step, 0};
59+
move = vec3_multiply(up, -step);
5960
else
6061
return ;
6162
render->scene->camera.position = vec3_add(render->scene->camera.position,

0 commit comments

Comments
 (0)