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_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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user