Calculate the triangle normal from midpoint

This commit is contained in:
Abdelrahman Said 2024-07-14 17:56:01 +01:00
parent 51099ae97e
commit 70dfb5d5ee

View File

@ -415,16 +415,28 @@ internal void cull_back_faces(Arena *arena, const rasteriser_scene_t *scene,
list_uint64_t *to_remove = list_uint64_t *to_remove =
list_create_with_capacity(u64, arena, model->triangles->count); list_create_with_capacity(u64, arena, model->triangles->count);
vec3f_t normal; vec3f_t normal;
scene_triangle_t triangle; scene_triangle_t *triangle;
vertex_t v0; vertex_t v0;
vertex_t v1;
vertex_t v2;
vec3f_t sum;
vec3f_t midpoint;
vec3f_t viewing_vector; vec3f_t viewing_vector;
f32 dot_product; f32 dot_product;
for (u64 i = 0; i < model->triangles->count; ++i) { for (u64 i = 0; i < model->triangles->count; ++i) {
triangle = list_get(model->triangles, i); triangle = &(list_get(model->triangles, i));
v0 = list_get(model->vertices, triangle.idx0);
normal = calculate_triangle_normal(model, &triangle); v0 = list_get(model->vertices, triangle->idx0);
viewing_vector = vec_sub(vec3f_t, v0.position, scene->camera->position); v1 = list_get(model->vertices, triangle->idx1);
v2 = list_get(model->vertices, triangle->idx2);
sum = vec_add(vec3f_t, v0.position,
vec_add(vec3f_t, v1.position, v2.position));
midpoint = vec_div_num(vec3f_t, sum, 3);
normal = calculate_triangle_normal(model, triangle);
viewing_vector = vec_sub(vec3f_t, midpoint, scene->camera->position);
dot_product = vec_dot(vec3f_t, normal, viewing_vector); dot_product = vec_dot(vec3f_t, normal, viewing_vector);
if (dot_product <= 0.0f) { if (dot_product <= 0.0f) {