예제 #1
0
파일: main.c 프로젝트: vle-guen/RT
void	give_effect(t_env *e)
{
	e->effect.vec = give_vec(e->obj_tmp, e);
	e->effect.shadow = give_shadow(e);
	e->effect.light = my_light(e);
	e->effect.bri = light_effect(e);
	//e->effect.light = mult_value(&(e->effect.light), e->effect.shadow);
	e->effect.bri = a_x_b(&(e->effect.bri), &(e->effect.light));
}
예제 #2
0
파일: ray_tracer.c 프로젝트: NSSX/good
t_vec3d	final_color(t_env *e)
{
  t_vec3d normal;
  t_vec3d col_tmp;
  t_vec3d color;
  t_vec3d reflex;

  e->value = 100000000;
  e->obj_tmp = all_inter(e);
  e->color = (t_vec3d){0,0,0};
  color = (t_vec3d){0,0,0};
  if (e->obj_tmp && e->value > 0.0001)
	{
	  //POUR LE SOL
	  /*if(e->obj_tmp->type == 10)
	    {
	      int x = e->x + ((e->v / 0.2) * 50);
	      int y = e->y - ((e->v2 / 0.2) * 50);
	      y -=  e->eye_pos.z * 3;
	      if(x<0)
		x = -x;
	      if(y<0)
		y = -y;
	      int color1 = e->sol->data[y * e->sol->sizeline + x * e->sol->bpp / 8];
	      int color2 = e->sol->data[y * e->sol->sizeline + x * e->sol->bpp / 8 + 1];
	      int color3 = e->sol->data[y * e->sol->sizeline + x * e->sol->bpp / 8 + 2];
	      e->img->data[e->y * e->img->sizeline + e->x * e->img->bpp / 8] = color1;
	      e->img->data[e->y * e->img->sizeline + e->x * e->img->bpp / 8 + 1] = color2;
	      e->img->data[e->y * e->img->sizeline + e->x * e->img->bpp / 8 + 2] = color3;
	      e->no = 1;
	    }
	    else*/
	  e->color = (t_vec3d){e->obj_tmp->color.x, e->obj_tmp->color.y, e->obj_tmp->color.z};
	  if (e->value < 100000000)
	    give_my_pos(e);
	  normal = give_vec(e->obj_tmp, e);
	   double ref;
	  ref = 1;
	  color = e->color;
	   //	  if(e->obj_tmp->type == 1 || e->obj_tmp->type == 0)
	  /*	  if(e->obj_tmp->ref > 0)
	    ref = e->obj_tmp->ref;//0.25;
	  if (ref < 1 && e->nb_ref < REF)
	    {
	      e->nb_ref += 1;
	      reflex = ft_reflex(&(e->ray_dir), &normal );
	      ajust(&reflex);
	      normal  =  mult_value(&normal , 0.001);
	      e->pos = plus(&(e->pos), &normal );
	      color =  mult_value(&(color), ref);
	      e->ray_origin = e->pos;
	      e->ray_dir = reflex;
	      col_tmp = final_color(e);
	      col_tmp =  mult_value(&col_tmp, 1 - ref);
	      color = plus(&(color), &col_tmp);
	      }*/
	  //if(e->obj_tmp->type == 1) SI ON VEUT REFRACTIONNER UNE VRAI IMAGE 
	  //SINON on affiche juste tel quel est decrite dans le fichier
	  	  if(e->obj_tmp->refraction != 0 && e->myetat == 0)
	    {
	      e->myetat = 1;
       	      e->ray_dir = refract(e, &normal);
	      ajust(&(e->ray_dir));
	      color = mult_value(&(color), 0.8);
	      col_tmp = final_color(e);
	       col_tmp = mult_value(&col_tmp, 1 - 0.5);
	      color = plus(&(color), &col_tmp);
	      }
	}
  //POUR LE CIEL
  /*else
	  {
	    e->no = 1;
	    int x = e->x + ((e->v / 0.2) * 50);
	    int y = e->y + ((e->v2 / 0.2) * 20);
	    if(x<0)
	      x = -x;
	    if(y<0)
	      y = -y;
	    int color1 = e->skybox->data[y * e->skybox->sizeline + x * e->skybox->bpp / 8];
	    int color2 = e->skybox->data[y * e->skybox->sizeline + x * e->skybox->bpp / 8 + 1];
	    int color3 = e->skybox->data[y * e->skybox->sizeline + x * e->skybox->bpp / 8 + 2];
	    e->img->data[e->y * e->img->sizeline + e->x * e->img->bpp / 8] = color1;
	    e->img->data[e->y * e->img->sizeline + e->x * e->img->bpp / 8 + 1] = color2;
	    e->img->data[e->y * e->img->sizeline + e->x * e->img->bpp / 8 + 2] = color3;
	    }*/
	return (color);
}