Calculate the triangle normal from midpoint
This commit is contained in:
parent
51099ae97e
commit
70dfb5d5ee
@ -415,16 +415,28 @@ internal void cull_back_faces(Arena *arena, const rasteriser_scene_t *scene,
|
||||
list_uint64_t *to_remove =
|
||||
list_create_with_capacity(u64, arena, model->triangles->count);
|
||||
vec3f_t normal;
|
||||
scene_triangle_t triangle;
|
||||
scene_triangle_t *triangle;
|
||||
vertex_t v0;
|
||||
vertex_t v1;
|
||||
vertex_t v2;
|
||||
vec3f_t sum;
|
||||
vec3f_t midpoint;
|
||||
vec3f_t viewing_vector;
|
||||
f32 dot_product;
|
||||
|
||||
for (u64 i = 0; i < model->triangles->count; ++i) {
|
||||
triangle = list_get(model->triangles, i);
|
||||
v0 = list_get(model->vertices, triangle.idx0);
|
||||
normal = calculate_triangle_normal(model, &triangle);
|
||||
viewing_vector = vec_sub(vec3f_t, v0.position, scene->camera->position);
|
||||
triangle = &(list_get(model->triangles, i));
|
||||
|
||||
v0 = list_get(model->vertices, triangle->idx0);
|
||||
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);
|
||||
|
||||
if (dot_product <= 0.0f) {
|
||||
|
Loading…
Reference in New Issue
Block a user