#ifndef RAYTRACER_H #define RAYTRACER_H #include "c_cpp_aliases/aliases.h" #include "vector/vec.h" #include "window/window.h" typedef struct { f32 radius; vec3f_t centre; colour_t colour; f32 specular; f32 reflective; } sphere_t; typedef enum { LIGHT_TYPE_POINT, LIGHT_TYPE_DIRECTIONAL, LIGHT_TYPE_AMBIENT, COUNT_LIGHT_TYPE, } light_type_t; typedef struct { light_type_t type; f32 intensity; union { vec3f_t position; vec3f_t direction; }; } light_t; typedef struct { sphere_t *spheres; light_t *lights; u32 spheres_count; u32 lights_count; } scene_t; typedef struct { f32 t1; f32 t2; } solutions_t; typedef struct { f32 closest_t; sphere_t *closest_sphere; } intersection_t; colour_t trace_ray(vec3f_t origin, vec3f_t direction, f32 t_min, f32 t_max, const scene_t *scene, colour_t default_colour, u32 recursion_depth); #endif // !RAYTRACER_H