semiworking color gradient x2

This commit is contained in:
Gregory 2017-03-12 01:19:43 +02:00
parent 3864910ac0
commit 2d243b3d57
6 changed files with 44 additions and 24 deletions

View file

@ -63,6 +63,7 @@ typedef struct s_map
int x_max; int x_max;
int y_max; int y_max;
int z_max; int z_max;
int z_min;
} t_map; } t_map;
typedef struct s_mat4 typedef struct s_mat4
@ -128,6 +129,7 @@ t_color color_lerp(t_color c1, t_color c2, float step);
t_color int_to_color(int c); t_color int_to_color(int c);
int color_to_int(t_color c); int color_to_int(t_color c);
t_color choose_color(t_line *line, t_swap *s, t_FDF *FDF); t_color choose_color(t_line *line, t_swap *s, t_FDF *FDF);
void first_color(t_pnt *pnt, float z, t_map *map);
t_mw *mlx_and_win_ptr_init(int x, int y); t_mw *mlx_and_win_ptr_init(int x, int y);
t_FDF *FDF_init(char *path); t_FDF *FDF_init(char *path);

View file

@ -44,20 +44,27 @@ t_color choose_color(t_line *line, t_swap *s, t_FDF *FDF)
FDF = FDF; FDF = FDF;
z1 = line->p1.z; z1 = line->p1.z;
z2 = line->p2.z; z2 = line->p2.z;
if (z2 == 0 && z1 == 0) if (s->swap_z)
c = int_to_color(COLOR1); if (z2 == 0)
else if (z1 == z2) c = int_to_color(color_to_int(line->p2.color));
c = int_to_color(COLOR2);
else if (z2 == 0)
c = int_to_color(COLOR1);
else if (z1 == 0)
c = int_to_color(COLOR2);
else
{
if (s->swap_z)
c = color_lerp(int_to_color(COLOR2), int_to_color(COLOR1), z1 / z2);
else else
c = color_lerp(int_to_color(COLOR1), int_to_color(COLOR2), z1 / z2); c = color_lerp(line->p2.color, line->p1.color, z1 / z2);
} else
if (z2 == 0)
c = int_to_color(color_to_int(line->p1.color));
else
c = color_lerp(line->p1.color, line->p2.color, z1 / z2);
return (c); return (c);
} }
void first_color(t_pnt *pnt, float z, t_map *map)
{
if (z == map->z_min)
pnt->color = int_to_color(COLOR1);
if (z == map->z_max)
pnt->color = int_to_color(COLOR2);
else
pnt->color = color_lerp(
int_to_color(COLOR1),
int_to_color(COLOR2), fabs(z / (map->z_max - map->z_min)));
}

View file

@ -3,11 +3,15 @@
static void swap_z(t_pnt *p1, t_pnt *p2) static void swap_z(t_pnt *p1, t_pnt *p2)
{ {
float tmp; float tmp;
t_color c;
tmp = p1->z; tmp = p1->z;
p1->z = p2->z; p1->z = p2->z;
p2->z = tmp; p2->z = tmp;
c = p1->color;
p1->color = p2->color;
p2->color = c;
} }
static void swap_x_y(t_pnt *p1, t_pnt *p2) static void swap_x_y(t_pnt *p1, t_pnt *p2)
@ -37,7 +41,7 @@ static void draw_line(t_line *line, t_swap *s, t_FDF *FDF)
int dx; int dx;
int dy; int dy;
int derr; int derr;
float dz; double dz;
dx = abs(line->p2.x - line->p1.x); dx = abs(line->p2.x - line->p1.x);
dy = abs(line->p2.y - line->p1.y); dy = abs(line->p2.y - line->p1.y);

View file

@ -48,26 +48,31 @@ void map_dimensions(t_map *map)
{ {
int x; int x;
int y; int y;
int z; int max_z;
int min_z;
t_list *l; t_list *l;
l = map->lst_map; l = map->lst_map;
x = 0; x = 0;
y = 0; y = 0;
z = 0; max_z = 0;
min_z = 0;
while (l) while (l)
{ {
if (((t_vec *)(l->content))->x > x) if (((t_vec *)(l->content))->x > x)
x = (int)((t_vec *)(l->content))->x; x = (int)((t_vec *)(l->content))->x;
if (((t_vec *)(l->content))->y > y) if (((t_vec *)(l->content))->y > y)
y = (int)((t_vec *)(l->content))->y; y = (int)((t_vec *)(l->content))->y;
if (((t_vec *)(l->content))->z > z) if (((t_vec *)(l->content))->z > max_z)
z = (int)((t_vec *)(l->content))->z; max_z = (int)((t_vec *)(l->content))->z;
if (((t_vec *)(l->content))->z < min_z)
min_z = (int)((t_vec *)(l->content))->z;
l = l->next; l = l->next;
} }
map->x_max = x; map->x_max = x;
map->y_max = y; map->y_max = y;
map->z_max = z; map->z_max = max_z;
map->z_min = min_z;
} }
t_map *map_init(char *path) t_map *map_init(char *path)

View file

@ -6,7 +6,7 @@ void pnt_init(t_map *map)
t_list *lst_map; t_list *lst_map;
int i; int i;
int j; int j;
float z;
lst_map = map->lst_map; lst_map = map->lst_map;
arr_pnt = malloc(sizeof(t_pnt *) * (map->y_max + 1)); arr_pnt = malloc(sizeof(t_pnt *) * (map->y_max + 1));
i = 0; i = 0;
@ -16,7 +16,9 @@ void pnt_init(t_map *map)
arr_pnt[i] = malloc(sizeof(t_pnt) * (map->x_max + 1)); arr_pnt[i] = malloc(sizeof(t_pnt) * (map->x_max + 1));
while (j <= map->x_max) while (j <= map->x_max)
{ {
arr_pnt[i][j].z = ((t_vec *)(lst_map->content))->z; z = ((t_vec *)(lst_map->content))->z;
arr_pnt[i][j].z = z;
first_color(&arr_pnt[i][j], z, map);
lst_map = lst_map->next; lst_map = lst_map->next;
j++; j++;
} }

View file

@ -155,7 +155,7 @@ void render(t_FDF *FDF)
rot_z = mat4_init(); rot_z = mat4_init();
translate = mat4_init(); translate = mat4_init();
scale = mat4_init(); scale = mat4_init();
final = mat4_init(); //final = mat4_init();
vp = viewport_mat_init(FDF->w_width, FDF->w_height); vp = viewport_mat_init(FDF->w_width, FDF->w_height);
orth = orth_mat_init( orth = orth_mat_init(
0, 0,