Add shadows
This commit is contained in:
parent
1f5568b63e
commit
56959990e4
@ -2,6 +2,7 @@
|
||||
#include "vector/vec.h"
|
||||
#include "window/window.h"
|
||||
#include <SDL2/SDL_events.h>
|
||||
#include <float.h>
|
||||
#include <math.h>
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
@ -282,18 +283,27 @@ f32 compute_lighting(vec3f_t position, vec3f_t surface_normal,
|
||||
I += light.intensity;
|
||||
} else {
|
||||
vec3f_t light_direction = {0};
|
||||
f32 t_max = FLT_EPSILON;
|
||||
|
||||
switch (light.type) {
|
||||
case LIGHT_TYPE_POINT:
|
||||
light_direction = vec_sub(vec3f_t, light.position, position);
|
||||
t_max = 1;
|
||||
break;
|
||||
case LIGHT_TYPE_DIRECTIONAL:
|
||||
light_direction = light.direction;
|
||||
t_max = INFINITY;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
intersection_t shadow = find_closest_intersection(
|
||||
position, light_direction, 0.001f, t_max, scene);
|
||||
if (shadow.closest_sphere != NULL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
I += light_diffuse(light.intensity, light_direction, surface_normal);
|
||||
|
||||
if (specular_exponent != -1.0f) {
|
||||
|
Loading…
Reference in New Issue
Block a user