Add colour field to triangle
This commit is contained in:
parent
96c5d21f79
commit
c9f3c6ab01
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user