diff options
| -rw-r--r-- | src/modules/ray/ray_scene.c | 5 | ||||
| -rw-r--r-- | src/modules/ray/ray_scene.h | 16 | 
2 files changed, 13 insertions, 8 deletions
| diff --git a/src/modules/ray/ray_scene.c b/src/modules/ray/ray_scene.c index acd65d3..955bab6 100644 --- a/src/modules/ray/ray_scene.c +++ b/src/modules/ray/ray_scene.c @@ -57,8 +57,7 @@ static inline ray_color_t shade_ray(ray_scene_t *scene, ray_ray_t *ray, ray_obje  	unsigned	i;  	surface = ray_object_surface(object, &intersection); -	color = ray_3f_mult_scalar(&scene->ambient_color, scene->ambient_brightness); -	color = ray_3f_mult(&surface.color, &color); +	color = ray_3f_mult(&surface.color, &scene->_prepared.ambient_light);  	/* visit lights for shadows and illumination */  	for (i = 0; i < scene->n_lights; i++) { @@ -186,6 +185,8 @@ void ray_scene_prepare(ray_scene_t *scene)  {  	unsigned	i; +	scene->_prepared.ambient_light = ray_3f_mult_scalar(&scene->ambient_color, scene->ambient_brightness); +  	for (i = 0; i < scene->n_objects; i++)  		ray_object_prepare(&scene->objects[i]);  } diff --git a/src/modules/ray/ray_scene.h b/src/modules/ray/ray_scene.h index d8a1e7a..820b16b 100644 --- a/src/modules/ray/ray_scene.h +++ b/src/modules/ray/ray_scene.h @@ -10,14 +10,18 @@  typedef union ray_object_t ray_object_t;  typedef struct ray_scene_t { -	ray_object_t	*objects; -	unsigned	n_objects; +	ray_object_t		*objects; +	unsigned		n_objects; -	ray_object_t	*lights; -	unsigned	n_lights; +	ray_object_t		*lights; +	unsigned		n_lights; -	ray_color_t	ambient_color; -	float		ambient_brightness; +	ray_color_t		ambient_color; +	float			ambient_brightness; + +	struct { +		ray_color_t	ambient_light; +	} _prepared;  } ray_scene_t;  void ray_scene_prepare(ray_scene_t *scene); | 
