pudate miniRT.h nomr

This commit is contained in:
H3XploR
2025-02-19 16:53:36 +01:00
parent 4a67c6f905
commit d32c5bd01c
12 changed files with 134 additions and 120 deletions
+32 -32
View File
@@ -6,23 +6,23 @@
/* By: yantoine <yantoine@student.42.fr> +#+ +:+ +#+ */ /* By: yantoine <yantoine@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2025/02/19 16:07:55 by yantoine #+# #+# */ /* Created: 2025/02/19 16:07:55 by yantoine #+# #+# */
/* Updated: 2025/02/19 16:16:52 by yantoine ### ########.fr */ /* Updated: 2025/02/19 16:47:28 by yantoine ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "miniRT.h" #include "miniRT.h"
static bool intersect_spheres(const t_ray ray, t_hit *hit, t_sphere *spheres, static bool intersect_spheres(const t_ray ray, t_hit *hit, t_sphere *spheres,
int numSpheres) int num_spheres)
{ {
int i; int i;
bool hitAny; bool hit_any;
t_vec3 n; t_vec3 n;
float t; float t;
i = 0; i = 0;
hitAny = false; hit_any = false;
while (i < numSpheres) while (i < num_spheres)
{ {
t = intersect_sphere(ray, spheres[i], &n); t = intersect_sphere(ray, spheres[i], &n);
if (t > 1e-3f && t < hit->t) if (t > 1e-3f && t < hit->t)
@@ -30,24 +30,24 @@ static bool intersect_spheres(const t_ray ray, t_hit *hit, t_sphere *spheres,
hit->t = t; hit->t = t;
hit->normal = n; hit->normal = n;
hit->color = spheres[i].color; hit->color = spheres[i].color;
hitAny = true; hit_any = true;
} }
i++; i++;
} }
return (hitAny); return (hit_any);
} }
static bool intersect_planes(const t_ray ray, t_hit *hit, t_plane *planes, static bool intersect_planes(const t_ray ray, t_hit *hit, t_plane *planes,
int numPlanes) int num_planes)
{ {
int i; int i;
bool hitAny; bool hit_any;
t_vec3 n; t_vec3 n;
float t; float t;
i = 0; i = 0;
hitAny = false; hit_any = false;
while (i < numPlanes) while (i < num_planes)
{ {
t = intersect_plane(ray, planes[i], &n); t = intersect_plane(ray, planes[i], &n);
if (t > 1e-3f && t < hit->t) if (t > 1e-3f && t < hit->t)
@@ -55,24 +55,24 @@ static bool intersect_planes(const t_ray ray, t_hit *hit, t_plane *planes,
hit->t = t; hit->t = t;
hit->normal = n; hit->normal = n;
hit->color = planes[i].color; hit->color = planes[i].color;
hitAny = true; hit_any = true;
} }
i++; i++;
} }
return (hitAny); return (hit_any);
} }
static bool intersect_cylinders(const t_ray ray, t_hit *hit, static bool intersect_cylinders(const t_ray ray, t_hit *hit,
t_cylinder *cylinders, int numCylinders) t_cylinder *cylinders, int num_cylinders)
{ {
int i; int i;
bool hitAny; bool hit_any;
t_vec3 n; t_vec3 n;
float t; float t;
i = 0; i = 0;
hitAny = false; hit_any = false;
while (i < numCylinders) while (i < num_cylinders)
{ {
t = intersect_cylinder(ray, cylinders[i], &n); t = intersect_cylinder(ray, cylinders[i], &n);
if (t > 1e-3f && t < hit->t) if (t > 1e-3f && t < hit->t)
@@ -80,33 +80,33 @@ static bool intersect_cylinders(const t_ray ray, t_hit *hit,
hit->t = t; hit->t = t;
hit->normal = n; hit->normal = n;
hit->color = cylinders[i].color; hit->color = cylinders[i].color;
hitAny = true; hit_any = true;
} }
i++; i++;
} }
return (hitAny); return (hit_any);
} }
bool intersect_objects(float *tMin, t_vec3 *hitNormal, t_vec3 *objColor, bool intersect_objects(float *tMin, t_vec3 *hitNormal, t_vec3 *objColor,
t_scene scene) t_scene scene)
{ {
t_hit hit; t_hit hit;
bool hitFound; bool hit_found;
hitFound = false; hit_found = false;
hit.t = *tMin; hit.t = *tMin;
if (intersect_spheres(scene.ray, &hit, scene.spheres, scene.numSpheres)) if (intersect_spheres(scene.ray, &hit, scene.spheres, scene.num_spheres))
hitFound = true; hit_found = true;
if (intersect_planes(scene.ray, &hit, scene.planes, scene.numPlanes)) if (intersect_planes(scene.ray, &hit, scene.planes, scene.num_planes))
hitFound = true; hit_found = true;
if (intersect_cylinders(scene.ray, &hit, scene.cylinders, if (intersect_cylinders(scene.ray, &hit, scene.cylinders,
scene.numCylinders)) scene.num_cylinders))
hitFound = true; hit_found = true;
if (hitFound) if (hit_found)
{ {
*tMin = hit.t; *tMin = hit.t;
*hitNormal = hit.normal; *hitNormal = hit.normal;
*objColor = hit.color; *objColor = hit.color;
} }
return (hitFound); return (hit_found);
} }
BIN
View File
Binary file not shown.
+7 -7
View File
@@ -6,7 +6,7 @@
/* By: yantoine <yantoine@student.42.fr> +#+ +:+ +#+ */ /* By: yantoine <yantoine@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2025/02/13 20:02:36 by yantoine #+# #+# */ /* Created: 2025/02/13 20:02:36 by yantoine #+# #+# */
/* Updated: 2025/02/19 16:37:07 by yantoine ### ########.fr */ /* Updated: 2025/02/19 16:48:27 by yantoine ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -124,12 +124,12 @@ typedef struct s_scene
t_ambient ambient; t_ambient ambient;
t_camera camera; t_camera camera;
t_ray ray; t_ray ray;
int numSpheres; int num_spheres;
int numPlanes; int num_planes;
int numCylinders; int num_cylinders;
int numCamera; int num_camera;
int numLights; int num_lights;
int numAmbient; int num_ambient;
char *line_if_exit; char *line_if_exit;
char **token_if_exit; char **token_if_exit;
int fd_if_exit; int fd_if_exit;
+3 -3
View File
@@ -6,7 +6,7 @@
/* By: yantoine <yantoine@student.42.fr> +#+ +:+ +#+ */ /* By: yantoine <yantoine@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2025/02/14 18:04:39 by yantoine #+# #+# */ /* Created: 2025/02/14 18:04:39 by yantoine #+# #+# */
/* Updated: 2025/02/17 21:53:34 by yantoine ### ########.fr */ /* Updated: 2025/02/19 16:48:50 by yantoine ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -16,11 +16,11 @@ t_scene parsing_ambiant(t_scene scene)
{ {
char **tokens; char **tokens;
tokens = get_tokens_secure(scene, scene.numAmbient, MAX_AMBIENT, 3); tokens = get_tokens_secure(scene, scene.num_ambient, MAX_AMBIENT, 3);
scene.token_if_exit = tokens; scene.token_if_exit = tokens;
scene.ambient.ratio = ft_atof(tokens[1]); scene.ambient.ratio = ft_atof(tokens[1]);
scene.ambient.color = parse_color(tokens[2], scene); scene.ambient.color = parse_color(tokens[2], scene);
ft_free_array(tokens); ft_free_array(tokens);
scene.numAmbient++; scene.num_ambient++;
return (scene); return (scene);
} }
+3 -3
View File
@@ -6,7 +6,7 @@
/* By: yantoine <yantoine@student.42.fr> +#+ +:+ +#+ */ /* By: yantoine <yantoine@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2025/02/14 20:02:29 by yantoine #+# #+# */ /* Created: 2025/02/14 20:02:29 by yantoine #+# #+# */
/* Updated: 2025/02/17 21:24:12 by yantoine ### ########.fr */ /* Updated: 2025/02/19 16:49:01 by yantoine ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -16,7 +16,7 @@ t_scene parsing_camera(t_scene scene)
{ {
char **tokens; char **tokens;
tokens = get_tokens_secure(scene, scene.numCamera, MAX_CAMERA, 4); tokens = get_tokens_secure(scene, scene.num_camera, MAX_CAMERA, 4);
scene.token_if_exit = tokens; scene.token_if_exit = tokens;
scene.camera.camPos = parse_vector(tokens[1], scene); scene.camera.camPos = parse_vector(tokens[1], scene);
scene.camera.camDir = parse_vector_normalize(tokens[2], scene); scene.camera.camDir = parse_vector_normalize(tokens[2], scene);
@@ -24,6 +24,6 @@ t_scene parsing_camera(t_scene scene)
scene.camera.yaw = atan2f(scene.camera.camDir.x, -scene.camera.camDir.z); scene.camera.yaw = atan2f(scene.camera.camDir.x, -scene.camera.camDir.z);
scene.camera.pitch = asinf(scene.camera.camDir.y); scene.camera.pitch = asinf(scene.camera.camDir.y);
ft_free_array(tokens); ft_free_array(tokens);
scene.numCamera++; scene.num_camera++;
return (scene); return (scene);
} }
+10 -8
View File
@@ -6,7 +6,7 @@
/* By: yantoine <yantoine@student.42.fr> +#+ +:+ +#+ */ /* By: yantoine <yantoine@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2025/02/15 19:54:13 by yantoine #+# #+# */ /* Created: 2025/02/15 19:54:13 by yantoine #+# #+# */
/* Updated: 2025/02/18 17:24:08 by yantoine ### ########.fr */ /* Updated: 2025/02/19 16:53:04 by yantoine ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -16,15 +16,17 @@ t_scene parsing_cylindre(t_scene scene)
{ {
char **tokens; char **tokens;
tokens = get_tokens_secure(scene, scene.numCylinders, MAX_CYLINDERS, 6); tokens = get_tokens_secure(scene, scene.num_cylinders, MAX_CYLINDERS, 6);
scene.token_if_exit = tokens; scene.token_if_exit = tokens;
scene.cylinders[scene.numCylinders].center = parse_vector(tokens[1], scene); scene.cylinders[scene.num_cylinders].center = \
scene.cylinders[scene.numCylinders].axis = parse_vector_normalize(tokens[2], parse_vector(tokens[1], scene);
scene.cylinders[scene.num_cylinders].axis = \
parse_vector_normalize(tokens[2],
scene); scene);
scene.cylinders[scene.numCylinders].radius = ft_atof(tokens[3]); scene.cylinders[scene.num_cylinders].radius = ft_atof(tokens[3]);
scene.cylinders[scene.numCylinders].height = ft_atof(tokens[4]); scene.cylinders[scene.num_cylinders].height = ft_atof(tokens[4]);
scene.cylinders[scene.numCylinders].color = parse_color(tokens[5], scene); scene.cylinders[scene.num_cylinders].color = parse_color(tokens[5], scene);
ft_free_array(tokens); ft_free_array(tokens);
scene.numCylinders++; scene.num_cylinders++;
return (scene); return (scene);
} }
+6 -6
View File
@@ -6,7 +6,7 @@
/* By: yantoine <yantoine@student.42.fr> +#+ +:+ +#+ */ /* By: yantoine <yantoine@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2025/02/15 19:39:08 by yantoine #+# #+# */ /* Created: 2025/02/15 19:39:08 by yantoine #+# #+# */
/* Updated: 2025/02/17 21:29:55 by yantoine ### ########.fr */ /* Updated: 2025/02/19 16:49:57 by yantoine ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -16,12 +16,12 @@ t_scene parsing_light(t_scene scene)
{ {
char **tokens; char **tokens;
tokens = get_tokens_secure(scene, scene.numLights, MAX_LIGHTS, 4); tokens = get_tokens_secure(scene, scene.num_lights, MAX_LIGHTS, 4);
scene.token_if_exit = tokens; scene.token_if_exit = tokens;
scene.lights[scene.numLights].pos = parse_vector(tokens[1], scene); scene.lights[scene.num_lights].pos = parse_vector(tokens[1], scene);
scene.lights[scene.numLights].brightness = ft_atof(tokens[2]); scene.lights[scene.num_lights].brightness = ft_atof(tokens[2]);
scene.lights[scene.numLights].color = parse_color(tokens[3], scene); scene.lights[scene.num_lights].color = parse_color(tokens[3], scene);
ft_free_array(tokens); ft_free_array(tokens);
scene.numLights++; scene.num_lights++;
return (scene); return (scene);
} }
+6 -6
View File
@@ -6,7 +6,7 @@
/* By: yantoine <yantoine@student.42.fr> +#+ +:+ +#+ */ /* By: yantoine <yantoine@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2025/02/15 19:49:41 by yantoine #+# #+# */ /* Created: 2025/02/15 19:49:41 by yantoine #+# #+# */
/* Updated: 2025/02/18 20:34:02 by yantoine ### ########.fr */ /* Updated: 2025/02/19 16:50:10 by yantoine ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -16,14 +16,14 @@ t_scene parsing_plane(t_scene scene)
{ {
char **tokens; char **tokens;
tokens = get_tokens_secure(scene, scene.numPlanes, MAX_PLANES, 4); tokens = get_tokens_secure(scene, scene.num_planes, MAX_PLANES, 4);
scene.token_if_exit = tokens; scene.token_if_exit = tokens;
scene.planes[scene.numPlanes].point = parse_vector(tokens[1], scene); scene.planes[scene.num_planes].point = parse_vector(tokens[1], scene);
scene.planes[scene.numPlanes].normal = parse_vector_normalize(tokens[2], scene.planes[scene.num_planes].normal = parse_vector_normalize(tokens[2],
scene); scene);
scene.planes[scene.numPlanes].color = parse_color(tokens[3], scene); scene.planes[scene.num_planes].color = parse_color(tokens[3], scene);
ft_free_array(tokens); ft_free_array(tokens);
scene.numPlanes++; scene.num_planes++;
return (scene); return (scene);
} }
+6 -6
View File
@@ -6,7 +6,7 @@
/* By: yantoine <yantoine@student.42.fr> +#+ +:+ +#+ */ /* By: yantoine <yantoine@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2025/02/15 19:46:16 by yantoine #+# #+# */ /* Created: 2025/02/15 19:46:16 by yantoine #+# #+# */
/* Updated: 2025/02/18 20:39:35 by yantoine ### ########.fr */ /* Updated: 2025/02/19 16:50:19 by yantoine ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -16,13 +16,13 @@ t_scene parsing_sphere(t_scene scene)
{ {
char **tokens; char **tokens;
tokens = get_tokens_secure(scene, scene.numSpheres, MAX_SPHERES, 4); tokens = get_tokens_secure(scene, scene.num_spheres, MAX_SPHERES, 4);
scene.token_if_exit = tokens; scene.token_if_exit = tokens;
scene.spheres[scene.numSpheres].center = parse_vector(tokens[1], scene); scene.spheres[scene.num_spheres].center = parse_vector(tokens[1], scene);
scene.spheres[scene.numSpheres].radius = ft_atof(tokens[2]) / 2.0f; scene.spheres[scene.num_spheres].radius = ft_atof(tokens[2]) / 2.0f;
scene.spheres[scene.numSpheres].color = parse_color(tokens[3], scene); scene.spheres[scene.num_spheres].color = parse_color(tokens[3], scene);
ft_free_array(tokens); ft_free_array(tokens);
scene.numSpheres++; scene.num_spheres++;
return (scene); return (scene);
} }
+4 -4
View File
@@ -6,7 +6,7 @@
/* By: yantoine <yantoine@student.42.fr> +#+ +:+ +#+ */ /* By: yantoine <yantoine@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2025/02/17 18:58:42 by yantoine #+# #+# */ /* Created: 2025/02/17 18:58:42 by yantoine #+# #+# */
/* Updated: 2025/02/18 20:32:30 by yantoine ### ########.fr */ /* Updated: 2025/02/19 16:50:54 by yantoine ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -22,7 +22,7 @@ static bool check_shadow_sphere(const t_ray shadow_ray, float max_t,
float t; float t;
i = 0; i = 0;
while (i < scene.numSpheres) while (i < scene.num_spheres)
{ {
t = intersect_sphere(shadow_ray, scene.spheres[i], &dummy); t = intersect_sphere(shadow_ray, scene.spheres[i], &dummy);
if (t > epsilon && t < max_t) if (t > epsilon && t < max_t)
@@ -42,7 +42,7 @@ static bool check_shadow_plane(const t_ray shadow_ray, float max_t,
float t; float t;
i = 0; i = 0;
while (i < scene.numPlanes) while (i < scene.num_planes)
{ {
t = intersect_plane(shadow_ray, scene.planes[i], &dummy); t = intersect_plane(shadow_ray, scene.planes[i], &dummy);
if (t > epsilon && t < max_t) if (t > epsilon && t < max_t)
@@ -62,7 +62,7 @@ static bool check_shadow_cylinder(const t_ray shadow_ray, float max_t,
float t; float t;
i = 0; i = 0;
while (i < scene.numCylinders) while (i < scene.num_cylinders)
{ {
t = intersect_cylinder(shadow_ray, scene.cylinders[i], &dummy); t = intersect_cylinder(shadow_ray, scene.cylinders[i], &dummy);
if (t > epsilon && t < max_t) if (t > epsilon && t < max_t)
+9 -9
View File
@@ -284,8 +284,8 @@ bpp3 minilibx-linux/test/main.c /^int bpp3;$/;" v typeref:typename:int
bpp4 minilibx-linux/test/main.c /^int bpp4;$/;" v typeref:typename:int bpp4 minilibx-linux/test/main.c /^int bpp4;$/;" v typeref:typename:int
brightness miniRT.h /^ float brightness;$/;" m struct:s_light typeref:typename:float brightness miniRT.h /^ float brightness;$/;" m struct:s_light typeref:typename:float
c miniRT.h /^ float c;$/;" m struct:s_calc typeref:typename:float c miniRT.h /^ float c;$/;" m struct:s_calc typeref:typename:float
calc_light_contribution trace.c /^static t_vec3 calc_light_contribution(t_hit_info hit, t_light light, t_camera camera, t_scene sc/;" f typeref:typename:t_vec3 file: calc_light_contribution trace.c /^static t_vec3 calc_light_contribution(t_hit_info hit, t_light light,$/;" f typeref:typename:t_vec3 file:
calc_lighting trace.c /^t_vec3 calc_lighting(t_vec3 hit_point, t_vec3 hit_normal, t_vec3 obj_color, t_scene scene)$/;" f typeref:typename:t_vec3 calc_lighting trace.c /^t_vec3 calc_lighting(t_vec3 hit_point, t_vec3 hit_normal, t_vec3 obj_color,$/;" f typeref:typename:t_vec3
camDir miniRT.h /^ t_vec3 camDir;$/;" m struct:s_camera typeref:typename:t_vec3 camDir miniRT.h /^ t_vec3 camDir;$/;" m struct:s_camera typeref:typename:t_vec3
camPos miniRT.h /^ t_vec3 camPos;$/;" m struct:s_camera typeref:typename:t_vec3 camPos miniRT.h /^ t_vec3 camPos;$/;" m struct:s_camera typeref:typename:t_vec3
camera miniRT.h /^ t_camera camera;$/;" m struct:s_scene typeref:typename:t_camera camera miniRT.h /^ t_camera camera;$/;" m struct:s_scene typeref:typename:t_camera
@@ -298,7 +298,7 @@ check_shadow_plane shadows.c /^static bool check_shadow_plane(const t_ray shadow
check_shadow_sphere shadows.c /^static bool check_shadow_sphere(const t_ray shadow_ray, float max_t,$/;" f typeref:typename:bool file: check_shadow_sphere shadows.c /^static bool check_shadow_sphere(const t_ray shadow_ray, float max_t,$/;" f typeref:typename:bool file:
check_sign ft_atof.c /^inline static char *check_sign(char *str, int *sign)$/;" f typeref:typename:char * file: check_sign ft_atof.c /^inline static char *check_sign(char *str, int *sign)$/;" f typeref:typename:char * file:
check_tokens check.c /^int check_tokens(char **tokens, int expected)$/;" f typeref:typename:int check_tokens check.c /^int check_tokens(char **tokens, int expected)$/;" f typeref:typename:int
clamp_color trace.c /^static t_vec3 clamp_color(t_vec3 color)$/;" f typeref:typename:t_vec3 file: clamp_color trace.c /^static t_vec3 clamp_color(t_vec3 color)$/;" f typeref:typename:t_vec3 file:
clean libft/Makefile /^clean:$/;" t clean libft/Makefile /^clean:$/;" t
clean makefile /^clean:$/;" t clean makefile /^clean:$/;" t
clean minilibx-linux/Makefile /^clean :$/;" t clean minilibx-linux/Makefile /^clean :$/;" t
@@ -572,12 +572,12 @@ next minilibx-linux/mlx_int.h /^ struct s_win_list *next;$/;" m struct:s_win_lis
normal miniRT.h /^ t_vec3 normal;$/;" m struct:s_plane typeref:typename:t_vec3 normal miniRT.h /^ t_vec3 normal;$/;" m struct:s_plane typeref:typename:t_vec3
normal miniRT.h /^ t_vec3 normal;$/;" m struct:s_hit typeref:typename:t_vec3 normal miniRT.h /^ t_vec3 normal;$/;" m struct:s_hit typeref:typename:t_vec3
normal miniRT.h /^ t_vec3 normal;$/;" m struct:s_hit_info typeref:typename:t_vec3 normal miniRT.h /^ t_vec3 normal;$/;" m struct:s_hit_info typeref:typename:t_vec3
numAmbient miniRT.h /^ int numAmbient;$/;" m struct:s_scene typeref:typename:int num_ambient miniRT.h /^ int num_ambient;$/;" m struct:s_scene typeref:typename:int
numCamera miniRT.h /^ int numCamera;$/;" m struct:s_scene typeref:typename:int num_camera miniRT.h /^ int num_camera;$/;" m struct:s_scene typeref:typename:int
numCylinders miniRT.h /^ int numCylinders;$/;" m struct:s_scene typeref:typename:int num_cylinders miniRT.h /^ int num_cylinders;$/;" m struct:s_scene typeref:typename:int
numLights miniRT.h /^ int numLights;$/;" m struct:s_scene typeref:typename:int num_lights miniRT.h /^ int num_lights;$/;" m struct:s_scene typeref:typename:int
numPlanes miniRT.h /^ int numPlanes;$/;" m struct:s_scene typeref:typename:int num_planes miniRT.h /^ int num_planes;$/;" m struct:s_scene typeref:typename:int
numSpheres miniRT.h /^ int numSpheres;$/;" m struct:s_scene typeref:typename:int num_spheres miniRT.h /^ int num_spheres;$/;" m struct:s_scene typeref:typename:int
oc miniRT.h /^ t_vec3 oc;$/;" m struct:s_calc typeref:typename:t_vec3 oc miniRT.h /^ t_vec3 oc;$/;" m struct:s_calc typeref:typename:t_vec3
oc_dot_v miniRT.h /^ float oc_dot_v;$/;" m struct:s_calc typeref:typename:float oc_dot_v miniRT.h /^ float oc_dot_v;$/;" m struct:s_calc typeref:typename:float
oc_perp miniRT.h /^ t_vec3 oc_perp;$/;" m struct:s_calc typeref:typename:t_vec3 oc_perp miniRT.h /^ t_vec3 oc_perp;$/;" m struct:s_calc typeref:typename:t_vec3
+48 -36
View File
@@ -6,52 +6,64 @@
/* By: yantoine <yantoine@student.42.fr> +#+ +:+ +#+ */ /* By: yantoine <yantoine@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2025/02/17 19:07:07 by yantoine #+# #+# */ /* Created: 2025/02/17 19:07:07 by yantoine #+# #+# */
/* Updated: 2025/02/19 16:37:40 by yantoine ### ########.fr */ /* Updated: 2025/02/19 16:52:23 by yantoine ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "miniRT.h" #include "miniRT.h"
static t_vec3 clamp_color(t_vec3 color) static t_vec3 clamp_color(t_vec3 color)
{ {
if (color.x > 1.0f) if (color.x > 1.0f)
color.x = 1.0f; color.x = 1.0f;
if (color.y > 1.0f) if (color.y > 1.0f)
color.y = 1.0f; color.y = 1.0f;
if (color.z > 1.0f) if (color.z > 1.0f)
color.z = 1.0f; color.z = 1.0f;
return color; return (color);
} }
static t_vec3 calc_light_contribution(t_hit_info hit, t_light light, t_camera camera, t_scene scene) static t_vec3 calc_light_contribution(t_hit_info hit, t_light light,
t_camera camera, t_scene scene)
{ {
t_vec3 l = vec3_normalize(vec3_sub(light.pos, hit.point)); // Variable 1 t_vec3 l;
if (is_in_shadow(hit.point, light.pos, scene)) float diff;
return (t_vec3){0, 0, 0}; t_vec3 view_dir;
float diff = fmaxf(0.0f, vec3_dot(hit.normal, l)); // Variable 2 t_vec3 half_dir;
t_vec3 view_dir = vec3_normalize(vec3_sub(camera.camPos, hit.point)); // Variable 3 float spec;
t_vec3 half_dir = vec3_normalize(vec3_add(l, view_dir)); // Variable 4
float spec = powf(fmaxf(0.0f, vec3_dot(hit.normal, half_dir)), 32.0f); // Variable 5 l = vec3_normalize(vec3_sub(light.pos, hit.point));
return vec3_add( if (is_in_shadow(hit.point, light.pos, scene))
vec3_scale(vec3_mul(hit.color, light.color), diff * light.brightness), return ((t_vec3){0, 0, 0});
vec3_scale((t_vec3){1, 1, 1}, spec * light.brightness)); diff = fmaxf(0.0f, vec3_dot(hit.normal, l));
view_dir = vec3_normalize(vec3_sub(camera.camPos, hit.point));
half_dir = vec3_normalize(vec3_add(l, view_dir));
spec = powf(fmaxf(0.0f, vec3_dot(hit.normal, half_dir)), 32.0f);
return (vec3_add(vec3_scale(vec3_mul(hit.color, \
light.color), diff * light.brightness), \
vec3_scale((t_vec3){1, 1, 1}, \
spec * light.brightness)));
} }
t_vec3 calc_lighting(t_vec3 hit_point, t_vec3 hit_normal, t_vec3 obj_color, t_scene scene) t_vec3 calc_lighting(t_vec3 hit_point, t_vec3 hit_normal, t_vec3 obj_color,
t_scene scene)
{ {
t_vec3 color = vec3_scale(obj_color, scene.ambient.ratio); // Variable 1 t_vec3 color;
t_hit_info hit; // Variable 2 t_hit_info hit;
hit.point = hit_point; int i;
hit.normal = hit_normal;
hit.color = obj_color; color = vec3_scale(obj_color, scene.ambient.ratio);
int i = 0; // Variable 3 hit.point = hit_point;
while (i < scene.numLights) hit.normal = hit_normal;
{ hit.color = obj_color;
color = vec3_add(color, i = 0;
calc_light_contribution(hit, scene.lights[i], scene.camera, scene)); while (i < scene.num_lights)
i++; {
} color = vec3_add(color, calc_light_contribution(hit, scene.lights[i],
return clamp_color(color); scene.camera, scene));
i++;
}
return (clamp_color(color));
} }
// Fonction principale de lancer de rayon (trace) // Fonction principale de lancer de rayon (trace)
@@ -68,8 +80,8 @@ t_vec3 trace(t_ray ray, t_scene scene)
scene.ray = ray; scene.ray = ray;
if (intersect_objects(&t_min, &hit_normal, &obj_color, scene)) if (intersect_objects(&t_min, &hit_normal, &obj_color, scene))
{ {
hit_point = vec3_add(scene.ray.origin, \ hit_point = vec3_add(scene.ray.origin, vec3_scale(scene.ray.dir,
vec3_scale(scene.ray.dir, t_min)); t_min));
return (calc_lighting(hit_point, hit_normal, obj_color, scene)); return (calc_lighting(hit_point, hit_normal, obj_color, scene));
} }
return ((t_vec3){0, 0, 0}); return ((t_vec3){0, 0, 0});