Exemple #1
0
static int		ft_shadow(t_th *mlx, t_obj *tmp, t_obj *light, t_vec pos)
{
	t_obj	*node;
	t_vec	dist;

	node = mlx->obj;
	dist = ft_vectorsub(&light->pos, &pos);
	mlx->t = sqrtf(ft_vectordot(&dist, &dist));
	ft_vectornorm(&dist);
	while (node != NULL)
	{
		if (node != tmp)
		{
			if (node->type == 1)
				mlx->a = ft_inter_cone(mlx, node, dist, pos);
			else if (node->type == 2)
				mlx->a = ft_inter_cylinder(mlx, node, dist, pos);
			else if (node->type == 3)
				mlx->a = ft_inter_plane(mlx, node, dist, pos);
			else if (node->type == 4)
				mlx->a = ft_inter_sphere(mlx, node, dist, pos);
			if (mlx->a > 0.0001 && mlx->a < mlx->t)
				return (1);
		}
		node = node->next;
	}
	return (0);
}
Exemple #2
0
static t_obj	*ft_ref_inter(t_th *mlx, t_obj *node, t_obj *tmp, t_vec pos)
{
	t_obj	*tmp2;
	double	dist;

	tmp2 = NULL;
	while (node != NULL)
	{
		if (node != tmp)
		{
			if (node->type == 1)
				dist = ft_inter_cone(mlx, node, mlx->ref, pos);
			else if (node->type == 2)
				dist = ft_inter_cylinder(mlx, node, mlx->ref, pos);
			else if (node->type == 3)
				dist = ft_inter_plane(mlx, node, mlx->ref, pos);
			else if (node->type == 4)
				dist = ft_inter_sphere(mlx, node, mlx->ref, pos);
			if (dist > 0.0001 && dist < mlx->t)
			{
				tmp2 = node;
				mlx->t = dist;
			}
		}
		node = node->next;
	}
	return (tmp2);
}
Exemple #3
0
double			ft_cone(t_obj *obj, t_vector vec, t_scene *sc)
{
	t_eq		eq;
	t_vector	rot;

	rot.x = sc->rot.x + obj->rot.x;
	rot.y = sc->rot.y + obj->rot.y;
	rot.z = sc->rot.z + obj->rot.z;
	vec = ft_rotate(vec, &rot);
	eq = ft_inter_cone(obj, vec);
	if (eq.t1 > eq.t2 && eq.t2 > 0)
		return (eq.t2);
	else if (eq.t1 < eq.t2 && eq.t1 > 0)
		return (eq.t1);
	return (0);
}