Add colour field to triangle

This commit is contained in:
Abdelrahman Said 2024-06-29 17:46:50 +01:00
parent 96c5d21f79
commit c9f3c6ab01
2 changed files with 12 additions and 17 deletions

View File

@ -21,14 +21,12 @@ typedef struct {
f32 h0;
f32 h1;
f32 h2;
colour_t colour;
} triangle_t;
void draw_wireframe_triangle(window_t *wnd, Arena *arena, triangle_t triangle,
colour_t colour);
void draw_filled_triangle(window_t *wnd, Arena *arena, triangle_t triangle,
colour_t colour);
void draw_shaded_triangle(window_t *wnd, Arena *arena, triangle_t triangle,
colour_t colour);
void draw_wireframe_triangle(window_t *wnd, Arena *arena, triangle_t triangle);
void draw_filled_triangle(window_t *wnd, Arena *arena, triangle_t triangle);
void draw_shaded_triangle(window_t *wnd, Arena *arena, triangle_t triangle);
void draw_line(window_t *wnd, Arena *arena, line_t line, colour_t colour);
#endif // !RASTERISER_H

View File

@ -16,17 +16,15 @@ internal list_float_t *interpolate(Arena *arena, i32 i0, f32 d0, i32 i1,
internal inline void order_triangle_points(triangle_t *triangle);
void draw_wireframe_triangle(window_t *wnd, Arena *arena, triangle_t triangle,
colour_t colour) {
void draw_wireframe_triangle(window_t *wnd, Arena *arena, triangle_t triangle) {
order_triangle_points(&triangle);
draw_line(wnd, arena, (line_t){triangle.p0, triangle.p1}, colour);
draw_line(wnd, arena, (line_t){triangle.p1, triangle.p2}, colour);
draw_line(wnd, arena, (line_t){triangle.p2, triangle.p0}, colour);
draw_line(wnd, arena, (line_t){triangle.p0, triangle.p1}, triangle.colour);
draw_line(wnd, arena, (line_t){triangle.p1, triangle.p2}, triangle.colour);
draw_line(wnd, arena, (line_t){triangle.p2, triangle.p0}, triangle.colour);
}
void draw_filled_triangle(window_t *wnd, Arena *arena, triangle_t triangle,
colour_t colour) {
void draw_filled_triangle(window_t *wnd, Arena *arena, triangle_t triangle) {
order_triangle_points(&triangle);
i32 x0 = triangle.p0.x;
@ -59,13 +57,12 @@ void draw_filled_triangle(window_t *wnd, Arena *arena, triangle_t triangle,
i32 index = y - y0;
for (i64 x = (i64)list_get(x_left, index); x < list_get(x_right, index);
++x) {
set_pixel(wnd, x, y, colour);
set_pixel(wnd, x, y, triangle.colour);
}
}
}
void draw_shaded_triangle(window_t *wnd, Arena *arena, triangle_t triangle,
colour_t colour) {
void draw_shaded_triangle(window_t *wnd, Arena *arena, triangle_t triangle) {
order_triangle_points(&triangle);
i32 x0 = triangle.p0.x;
@ -124,7 +121,7 @@ void draw_shaded_triangle(window_t *wnd, Arena *arena, triangle_t triangle,
for (i64 x = xl; x < xr; ++x) {
h_segment = interpolate(arena, xl, list_get(h_left, index), xr,
list_get(h_right, index));
shaded_colour = colour_mul(colour, list_get(h_segment, x - xl));
shaded_colour = colour_mul(triangle.colour, list_get(h_segment, x - xl));
set_pixel(wnd, x, y, shaded_colour);
}
}