70 lines
2.3 KiB
C
70 lines
2.3 KiB
C
/* ************************************************************************** */
|
|
/* */
|
|
/* ::: :::::::: */
|
|
/* set_camera.c :+: :+: :+: */
|
|
/* +:+ +:+ +:+ */
|
|
/* By: gbrochar <marvin@42.fr> +#+ +:+ +#+ */
|
|
/* +#+#+#+#+#+ +#+ */
|
|
/* Created: 2019/02/07 15:12:51 by gbrochar #+# #+# */
|
|
/* Updated: 2019/02/22 17:28:43 by gbrochar ### ########.fr */
|
|
/* */
|
|
/* ************************************************************************** */
|
|
|
|
#include "rtv1.h"
|
|
|
|
void set_orientation(t_camera *camera)
|
|
{
|
|
camera->uv = vec(0, 1, 0);
|
|
camera->rv = cross_product(camera->uv, camera->d);
|
|
normalize(&camera->rv);
|
|
camera->uv = cross_product(camera->d, camera->rv);
|
|
camera->ul = vec_add(camera->o,
|
|
vec_add(vec_mul(camera->d, camera->dist),
|
|
vec_sub(vec_mul(camera->uv, (camera->height / 2)),
|
|
vec_mul(camera->rv, (camera->width / 2)))));
|
|
}
|
|
|
|
void init_camera(t_camera *camera)
|
|
{
|
|
if (WINX > WINY)
|
|
{
|
|
camera->height = 1 / ZOOM;
|
|
camera->width = WINX / WINY * (1 / ZOOM);
|
|
}
|
|
else
|
|
{
|
|
camera->width = 1 / ZOOM;
|
|
camera->height = WINX / WINY * (1 / ZOOM);
|
|
}
|
|
camera->dist = VP_DIST;
|
|
camera->o = vec(0, 0, 0);
|
|
camera->d = vec(0, 0, -1);
|
|
set_orientation(camera);
|
|
}
|
|
|
|
int set_camera(char **data, t_env *e)
|
|
{
|
|
int i;
|
|
|
|
i = 0;
|
|
ft_putendl("Setting camera");
|
|
while (data[i] && i < 7)
|
|
++i;
|
|
if (i > 3)
|
|
e->camera.o = vec(ft_atof(data[1]), ft_atof(data[2]), ft_atof(data[3]));
|
|
if (i > 6)
|
|
{
|
|
e->camera.d = vec(ft_atof(data[4]), ft_atof(data[5]), ft_atof(data[6]));
|
|
e->camera.d = vec_sub(e->camera.d, e->camera.o);
|
|
if (FAILURE == check_direction(e->camera.d))
|
|
return (FAILURE);
|
|
normalize(&e->camera.d);
|
|
if ((e->camera.d.y + E > 1 && e->camera.d.y - E < 1)
|
|
|| (e->camera.d.y + E > -1 && e->camera.d.y - E < -1))
|
|
e->camera.d.x = 0.01;
|
|
normalize(&e->camera.d);
|
|
set_orientation(&e->camera);
|
|
}
|
|
return (SUCCESS);
|
|
}
|