/ miniRT / practice / miniRT_practice / key_hook_camera.c
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  }