void ft_texture(t_ba *e, t_obj *o, double norm[3]) { double vn[3]; double ve[3]; double tmp[3]; double img[2]; double grk[2]; ft_init_text_vec(vn, ve, o); ft_normalize_ve_vn(ve, vn); grk[0] = acos(-scalar(vn, norm)); if (o->text == 1) img[0] = e->doge->y * (1 - grk[0] / M_PI); else if (o->text == 2) img[0] = e->mars->y * (1 - grk[0] / M_PI); else if (o->text == 3) img[0] = e->eye->y * (1 - grk[0] / M_PI); grk[1] = (acos(scalar(norm, ve) / sin(grk[0]))) / (2.0 * M_PI); tmp[X] = (vn[Y] * ve[Z]) - (ve[Z] * vn[Y]); tmp[Y] = (vn[Z] * ve[X]) - (ve[X] * vn[Z]); tmp[Z] = (vn[X] * ve[Y]) - (ve[Y] * vn[X]); if (scalar(tmp, norm) > 0) img[1] = grk[1]; else img[1] = 1 - grk[1]; ft_apply_texture(e, o, img); }
static void ft_draw_wall(t_mlx *mx, int y, int pixel) { if (mx->map.data[mx->v.map.x][mx->v.map.y] > 2 && mx->b & 2) ft_apply_texture(&mx->map, &mx->v, mx->height, y); else ft_set_color(&mx->v); ft_put_pixel(&mx->v, mx->data, pixel, WALL); }