Add render_object function

This commit is contained in:
2024-06-29 19:28:41 +01:00
parent 7c192d5edf
commit fa5453d399
2 changed files with 45 additions and 0 deletions

View File

@@ -15,6 +15,37 @@ internal list_float *interpolate(Arena *arena, i32 i0, f32 d0, i32 i1, f32 d1);
internal inline void order_triangle_points(triangle_t *triangle);
void render_object(window_t *wnd, Arena *arena, const camera_t *camera,
vec3f_t viewport, const list_vec3f_t *vertices,
const list_scene_triangle_t *triangles) {
list_vec2i_t *projected = list_create_with_capacity(
vec2i_t, arena, vertices->count * sizeof(vec3f_t));
if (!projected) {
return;
}
vec3f_t vertex = {0};
for (u64 i = 0; i < vertices->count; ++i) {
vertex = list_get(vertices, i);
list_append(vec2i_t, arena, projected,
project_point(vertex, wnd, camera, viewport));
}
for (u64 i = 0; i < triangles->count; ++i) {
scene_triangle_t triangle = list_get(triangles, i);
triangle_t tri = {
.p0 = list_get(projected, triangle.idx0),
.p1 = list_get(projected, triangle.idx1),
.p2 = list_get(projected, triangle.idx2),
.h0 = 1.0f,
.h1 = 1.0f,
.h2 = 1.0f,
.colour = triangle.colour,
};
draw_wireframe_triangle(wnd, arena, tri);
}
}
void draw_wireframe_triangle(window_t *wnd, Arena *arena, triangle_t triangle) {
order_triangle_points(&triangle);