key_hook_camera.c
1 /* ************************************************************************** */ 2 /* */ 3 /* ::: :::::::: */ 4 /* key_hook_camera.c :+: :+: :+: */ 5 /* +:+ +:+ +:+ */ 6 /* By: salee2 <salee2@student.42seoul.kr> +#+ +:+ +#+ */ 7 /* +#+#+#+#+#+ +#+ */ 8 /* Created: 2023/06/02 17:45:45 by salee2 #+# #+# */ 9 /* Updated: 2023/06/02 17:45:48 by salee2 ### ########.fr */ 10 /* */ 11 /* ************************************************************************** */ 12 13 #include "include/minirt.h" 14 15 t_point3 get_moved_point3(int keycode, t_point3 origin, \ 16 const int *dir_to_key) 17 { 18 int dir; 19 const double dz[DIR_SIZE] = {0, 0, 0, 0, 1, -1}; 20 const double dy[DIR_SIZE] = {0, 0, -1, 1, 0, 0}; 21 const double dx[DIR_SIZE] = {-1, 1, 0, 0, 0, 0}; 22 23 dir = 0; 24 while (dir < DIR_SIZE) 25 { 26 if (keycode == dir_to_key[dir]) 27 break ; 28 ++dir; 29 } 30 origin.z += dz[dir]; 31 origin.y += dy[dir]; 32 origin.x += dx[dir]; 33 return (origin); 34 } 35 36 void move_camera(int keycode, t_vars *vars, const int *dir_to_move_key) 37 { 38 t_point3 look_from; 39 40 mlx_clear_window(vars->mlx, vars->win); 41 look_from = get_moved_point3(keycode, vars->scene->camera.origin, \ 42 dir_to_move_key); 43 vars->scene->camera = camera_(&vars->scene->canvas, look_from, \ 44 add(look_from, point3_(0, 0, -1)), 70); 45 render(vars); 46 mlx_put_image_to_window(vars->mlx, vars->win, vars->img.img, 0, 0); 47 return ; 48 } 49 50 void rotate_camera(int keycode, t_vars *vars, const int *dir_to_rotate_key) 51 { 52 t_point3 look_at; 53 54 mlx_clear_window(vars->mlx, vars->win); 55 look_at = get_moved_point3(keycode, vars->scene->camera.origin, \ 56 dir_to_rotate_key); 57 vars->scene->camera = camera_(&vars->scene->canvas, look_at, \ 58 point3_(0, 0, -1), 70); 59 render(vars); 60 mlx_put_image_to_window(vars->mlx, vars->win, vars->img.img, 0, 0); 61 return ; 62 }