Esempio n. 1
0
void			ft_ray_cast(t_dt *dt, t_obj *obj)
{
	t_ray		*ray;
	int			pix[2];

	pix[1] = 0;
	ft_set_param(dt);
	while (pix[1] < Y_MAX)
	{
		pix[0] = 0;
		while (pix[0] < X_MAX)
		{
			ray = (t_ray *)malloc(sizeof(t_ray));
			ray->pix[1] = pix[1];
			ray->pix[0] = pix[0];
			ft_init_ray(ray, dt);
			ft_inter(ray, obj);
			ft_get_color(ray, obj);
			ft_mlx_add_col(dt, ray);
			pix[0] = pix[0] + 1;
			free(ray);
		}
		pix[1] = pix[1] + 1;
		mlx_put_image_to_window(dt->conn, dt->win, dt->img, 0, 0);
	}
}
Esempio 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);
}
Esempio n. 3
0
void				*ft_rc_th4(void *env)
{
	t_ray			*ray;
	int				pix[2];
	t_env			*tmp;

	tmp = (t_env *)env;
	pix[1] = 3 * Y_MAX / 4;
	while (pix[1] < Y_MAX)
	{
		pix[0] = 0;
		while (pix[0] < X_MAX)
		{
			ray = (t_ray *)malloc(sizeof(t_ray));
			ray->pix[1] = pix[1];
			ray->pix[0] = pix[0];
			ft_init_ray(ray, tmp->dt);
			ft_inter(ray, tmp->obj);
			ft_get_color(ray, tmp->obj);
			ft_mlx_add_col(tmp->dt, ray);
			pix[0] = pix[0] + 1;
			free(ray);
		}
		pix[1] = pix[1] + 1;
	}
	return (NULL);
}
Esempio n. 4
0
void	ft_raycast(t_all *all)
{
	FN.img = mlx_new_image(FN.mlx, LARG, HAUT);
	FN.data = mlx_get_data_addr(FN.img, &FN.bpp, &FN.sizeline, &FN.endian);
	all->x = 0;
	while (all->x < LARG)
	{
		ft_init_ray(all, &RAY, &PLAYER);
		ft_calc_dest_dist(all, &RAY);
		ft_check_hit(all, &RAY);
		ft_calc_wall_dist(all, &RAY);
		ft_calc_height_line(&RAY);
		ft_check_wall_color(all, &RAY);
		ft_verline(&RAY, all);
		all->x++;
	}
	mlx_put_image_to_window(FN.mlx, FN.win, FN.img, 0, 0);
	ft_move(all, &PLAYER, &KEY);
}