Exemplo n.º 1
0
t_matrix	ft_muli_matrix(t_matrix a, t_matrix b)
{
	int			i;
	int			j;
	int			p;
	t_matrix	m;

	i = 0;
	j = 0;
	p = 0;
	m = ft_init_matrix();
	while (j < 4)
	{
		while (i < 4)
		{
			while (p < 4)
			{
				m.n[j][i] += a.n[j][p] * b.n[p][i];
				p++;
			}
			p = 0;
			i++;
		}
		i = 0;
		j++;
	}
	return (m);
}
Exemplo n.º 2
0
int		raytracer(t_obj *obj, t_cam cam)
{
	int			i;
	int			j;
	t_r			r;
	double		**c2w;
	t_save		save;

	if (!(c2w = ft_init_matrix(&cam.b.vx, &cam.b.vy, &cam.b.vz)))
		return (-1);
	ft_init_ray(&r);
	r.o_w = cam.ro;
	j = -1;
	while (++j < HEIGHT)
	{
		i = -1;
		while (++i < WIDTH)
		{
			obj->depth = 0;
			ft_find_pixel_pos_on_screen(&cam.rp, i, j);
			ft_mult_vect_by_matrix(&r.d_w, c2w, cam.rp);
			ft_vect_difference(&r.d_w, r.d_w, r.o_w);
			ft_normalize_vect(&r.d_w);
			obj->pixel[j][i] = ft_trace(*obj, &r, &save);
		}
	}
	return (0);
}
Exemplo n.º 3
0
void		ft_apply_all_matrix(t_scene *scn)
{
	t_matrix	a;
	t_matrix	b;
	t_matrix	m;

	m = ft_init_matrix();
	a = ft_scale_matrix(scn->scale);
	if (scn->projection == 1)
		scn->rot = ft_get_vector(-1.1, 0.0, 0.80, 1.0);
	b = ft_rotation_matrix_z(scn->rot);
	m = ft_muli_matrix(b, a);
	b = ft_rotation_matrix_y(scn->rot);
	m = ft_muli_matrix(b, m);
	b = ft_rotation_matrix_x(scn->rot);
	m = ft_muli_matrix(b, m);
	b = ft_translation_matrix(scn->trans);
	m = ft_muli_matrix(b, m);
	ft_apply_all_vector(m, scn);
}