Beispiel #1
0
double		get_specular_coef(t_lco *lpt, double *cam_pos)
{
  double	lvec[3];
  double	cvec[3];
  double	rvec[3];
  double	scal[2];

  copy_tab(lpt->lvec, lvec, 3);
  cvec[0] = cam_pos[0] - lpt->obj_coor[0];
  cvec[1] = cam_pos[1] - lpt->obj_coor[1];
  cvec[2] = cam_pos[2] - lpt->obj_coor[2];
  unitaire(lvec);
  unitaire(lpt->nvec);
  scal[0] = scale(lvec, lpt->nvec);
  rvec[0] = lvec[0] - 2.0 * scal[0] * lpt->nvec[0];
  rvec[1] = lvec[1] - 2.0 * scal[0] * lpt->nvec[1];
  rvec[2] = lvec[2] - 2.0 * scal[0] * lpt->nvec[2];
  scal[1] = scale(rvec, cvec);
  if (scal[1] < 0)
    scal[1] += 360;
  if (scal[1] < 90)
    return (ABS(pow(cos_vector(rvec, cvec), 15)));
  return (0);
}
Beispiel #2
0
int		texture(t_vector3 eye, t_vector3 cam, t_best best)
{
  unsigned int	color;
  int		c;
  double	v;
  double	u;
  double	pos;

  translate(&eye, best.obj.p, 1);
  rot_inv(&eye, best.obj.r);
  rot_inv(&cam, best.obj.r);
  scale(&(cam), best.obj.s);
  best.normal = unitaire(get_normal(cam, eye, best));
  u = (int)(best.obj.tex.w * (0.5 + atan2(best.normal.z, best.normal.x)
			      / (2 * M_PI)));
  v = (int)(best.obj.tex.h * (0.5 - asin(best.normal.y) / M_PI));
  pos = 4 * u + 4 * v * best.obj.tex.w;
  c = (int)pos;
  color = 0;
  color += best.obj.tex.texture.data[c++] << 8;
  color += best.obj.tex.texture.data[c++] << 16;
  color += best.obj.tex.texture.data[c++] << 24;
  return (color);
}