示例#1
0
文件: ft_color.c 项目: rilax17/rt
void			ft_get_color(t_ray *ray, t_obj *obj)
{
	t_col		*col;

	col = (t_col *)malloc(sizeof(t_col));
	ft_init_col(ray, col);
	if (ray->d < D_MAX)
	{
		ft_get_color_obj(ray, obj, col);
		if (ray->opt_f == 0)
		{
			col->amb[0] = col->obj[0] * obj->amb[0];
			col->amb[1] = col->obj[1] * obj->amb[1];
			col->amb[2] = col->obj[2] * obj->amb[2];
			ft_calc_li(ray, obj, col);
			ft_calc_col(col, ray);
			if (ray->refl != NULL)
				ft_get_color(ray->refl, obj);
			if (ray->tran != NULL)
				ft_get_color(ray->tran, obj);
		}
		ft_rec_col(ray, obj);
	}
	ft_get_dir_li(ray, obj, col);
	free(col);
}
示例#2
0
int			ft_fill_cylinder(int fd, t_obj *tobj)
{
	char		*line;
	int			i;
	static int	wich = 0;
	t_cyl		*ttcyw;

	i = -1;
	if (!(((t_cyl ***)tobj->type)[CYLINDER][wich] = (t_cyl *)\
			malloc(sizeof(t_cyl))))
		return (-1);
	ttcyw = ((t_cyl ***)tobj->type)[CYLINDER][wich];
	while (++i < 5)
	{
		if (get_next_line(fd, &line) <= 0 || line[0] == '#')
		{
			ft_putstr_fd("Hay un problema con el cylindro", 2);
			return (-1);
		}
		ttcyw->sf = i == 0 ? ft_get_color(line) : ttcyw->sf;
		ttcyw->em = i == 1 ? ft_get_color(line) : ttcyw->em;
		ttcyw->c = i == 2 ? ft_get_vect(line) : ttcyw->c;
		ttcyw->r = i == 3 ? atof(line) : ttcyw->r;
		ttcyw->flag = i == 4 ? *line : ttcyw->flag;
	}
	wich++;
	return (0);
}
示例#3
0
int				ft_color(char *fmt, int i, int size, t_printf *conv)
{
	char	*color;

	color = ft_strsub(fmt, i, size);
	if (ft_strcmp(color, "{eoc}") == 0)
		ft_get_color(0, conv);
	else if (ft_strcmp(color, "{black}") == 0)
		ft_get_color(1, conv);
	else if (ft_strcmp(color, "{red}") == 0)
		ft_get_color(2, conv);
	else if (ft_strcmp(color, "{green}") == 0)
		ft_get_color(3, conv);
	else if (ft_strcmp(color, "{yellow}") == 0)
		ft_get_color(4, conv);
	else if (ft_strcmp(color, "{blue}") == 0)
		ft_get_color(5, conv);
	else if (ft_strcmp(color, "{pink}") == 0)
		ft_get_color(6, conv);
	else if (ft_strcmp(color, "{cyan}") == 0)
		ft_get_color(7, conv);
	else if (ft_strcmp(color, "{grey}") == 0)
		ft_get_color(8, conv);
	else
		ft_not_color(color, conv);
	ft_memdel((void **)&color);
	return (i + size);
}
示例#4
0
文件: init.c 项目: zhasni/Wolf3D
void	ft_texture_to_int(t_env *env)
{
	int				y;
	int				x;
	int				z;

	z = 0;
	while (z < 13)
	{
		y = 0;
		while (y < TEX_HEIGHT)
		{
			x = 0;
			while (x < TEX_WIDTH)
			{
				ft_get_color(env, x, y, z);
				env->texture[z][TEX_WIDTH * y + x] =
				toi(env->r, env->g, env->b);
				x++;
			}
			y++;
		}
		z++;
	}
}
示例#5
0
文件: ray_cast.c 项目: rilax17/rt
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);
	}
}
示例#6
0
文件: ft_threads.c 项目: rilax17/rt
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);
}
示例#7
0
static void		ft_draw_line(t_env *e, t_val pos, int *v)
{
	if (!v)
		ft_error();
	ft_fill_int_v(e, pos, v);
	while (1)
	{
		if ((v[6] + e->o_x) >= 0 && (v[6] + e->o_x) <= e->screen_width &&
			(v[8] + e->o_y) >= 0 && (v[8] + e->o_y) <= e->screen_height)
			mlx_pixel_put(e->mlx, e->win, (v[6] + e->o_x), (v[8] + e->o_y),
				ft_get_color(pos.z, e->color_map));
		if ((v[6] == v[7]) && (v[8] == v[9]))
			break ;
		v[5] = v[4];
		if (v[5] > -v[0])
			v[4] -= v[1];
		if (v[5] > -v[0])
			v[6] += v[2];
		if (v[5] < v[1])
			v[4] += v[0];
		if (v[5] < v[1])
			v[8] += v[3];
	}
	free(v);
}
示例#8
0
int		ft_key_hook(int keycode, t_env *e)
{
	if (e && (keycode == ESC))
	{
		write(1, "You've quit the program.\n", 25);
		exit(0);
	}
	else
	{
		if (e && (keycode == CTRL))
			e->img->angle += M_PI;
		else if (e && (keycode == 99))
			ft_get_color(e);
		else if (e && (keycode == 114))
		{
			e->img->pos_x = 1.0;
			e->img->pos_y = 1.0;
			e->img->angle = 0.0;
			e->img->color = 0x4B0082;
		}
		ft_move(e, keycode);
		ft_draw_wall(e);
	}
	return (0);
}
示例#9
0
void			ft_create_menu(t_scene *scn)
{
	int		x;
	int		y;

	y = 0;
	while (y < 200)
	{
		x = 0;
		while (x < SIZE_W)
		{
			ft_generate_image(scn->menu, x, y,
				ft_get_color(0, 200, 255, 255 - y));
			x++;
		}
		y++;
	}
}