diff --git a/calcul_de_vecteur.c b/calcul_de_vecteur.c index 6f5128b..51c2a8e 100644 --- a/calcul_de_vecteur.c +++ b/calcul_de_vecteur.c @@ -6,7 +6,7 @@ /* By: yantoine +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/02/13 20:15:13 by yantoine #+# #+# */ -/* Updated: 2025/02/13 20:15:46 by yantoine ### ########.fr */ +/* Updated: 2025/02/13 21:08:51 by yantoine ### ########.fr */ /* */ /* ************************************************************************** */ @@ -36,24 +36,6 @@ float vec3_dot(t_vec3 a, t_vec3 b) t_vec3 vec3_cross(t_vec3 a, t_vec3 b) { - return ((t_vec3){a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - - a.y * b.x}); -} - -float vec3_length(t_vec3 a) -{ - return (sqrtf(vec3_dot(a, a))); -} - -t_vec3 vec3_normalize(t_vec3 a) -{ - float len; - - len = vec3_length(a); - return ((len > 0) ? vec3_scale(a, 1.0f / len) : a); -} - -t_vec3 vec3_mul(t_vec3 a, t_vec3 b) -{ - return ((t_vec3){a.x * b.x, a.y * b.y, a.z * b.z}); + return ((t_vec3){a.y * b.z - a.z * b.y, \ + a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x}); } diff --git a/calcul_de_vecteur2.c b/calcul_de_vecteur2.c new file mode 100644 index 0000000..f2f3ea1 --- /dev/null +++ b/calcul_de_vecteur2.c @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* calcul_de_vecteur2.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: yantoine +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/02/13 20:59:38 by yantoine #+# #+# */ +/* Updated: 2025/02/13 21:08:27 by yantoine ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "miniRT.h" + +float vec3_length(t_vec3 a) +{ + return (sqrtf(vec3_dot(a, a))); +} + +t_vec3 vec3_normalize(t_vec3 a) +{ + float len; + + len = vec3_length(a); + if (len > 0) + return (vec3_scale(a, 1.0f / len)); + return (a); +} + +t_vec3 vec3_mul(t_vec3 a, t_vec3 b) +{ + return ((t_vec3){a.x * b.x, a.y * b.y, a.z * b.z}); +} diff --git a/miniRT.h b/miniRT.h index dece330..9befe5d 100644 --- a/miniRT.h +++ b/miniRT.h @@ -6,7 +6,7 @@ /* By: yantoine +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/02/13 20:02:36 by yantoine #+# #+# */ -/* Updated: 2025/02/13 20:16:50 by yantoine ### ########.fr */ +/* Updated: 2025/02/13 21:24:29 by yantoine ### ########.fr */ /* */ /* ************************************************************************** */ @@ -33,57 +33,69 @@ // ----- Structures typedef struct s_vec3 { - float x; - float y; - float z; -} t_vec3; + float x; + float y; + float z; +} t_vec3; // ----- Ray ----- -typedef struct s_vec3 +typedef struct s_ray { - t_vec3 origin; - t_vec3 dir; -} t_ray; + t_vec3 origin; + t_vec3 dir; +} t_ray; // ----- Objets de la scène ----- -typedef struct s_vec3 +typedef struct s_sphere { - t_vec3 center; - float radius; - t_vec3 color; -} t_sphere; + t_vec3 center; + float radius; + t_vec3 color; +} t_sphere; -typedef struct s_vec3 +typedef struct s_plane { - t_vec3 point; - t_vec3 normal; - t_vec3 color; -} t_plane; + t_vec3 point; + t_vec3 normal; + t_vec3 color; +} t_plane; -typedef struct s_vec3 +typedef struct s_cylinder { - t_vec3 center; - t_vec3 axis;// Axe normalisé - float radius;// Demi-diamètre - float height; - t_vec3 color; -} t_cylinder; + t_vec3 center; + t_vec3 axis; // Axe normalisé + float radius; // Demi-diamètre + float height; + t_vec3 color; +} t_cylinder; -typedef struct s_vec3 +typedef struct s_light { - t_vec3 pos; - float brightness; - t_vec3 color; -} t_light; + t_vec3 pos; + float brightness; + t_vec3 color; +} t_light; +typedef struct s_scene +{ + t_sphere spheres[MAX_SPHERES]; + t_plane planes[MAX_PLANES]; + t_cylinder cylinders[MAX_CYLINDERS]; + t_light lights[MAX_LIGHTS]; + int numSpheres; + int numPlanes; + int numCylinders; + int numLights; +} t_scene; // Calcul de vecteur -t_vec3 vec3_add(t_vec3 a, t_vec3 b); -t_vec3 vec3_sub(t_vec3 a, t_vec3 b); -t_vec3 vec3_scale(t_vec3 a, float s); -float vec3_dot(t_vec3 a, t_vec3 b); -t_vec3 vec3_cross(t_vec3 a, t_vec3 b); -float vec3_length(t_vec3 a); -t_vec3 vec3_normalize(t_vec3 a); -t_vec3 vec3_mul(t_vec3 a, t_vec3 b); +t_vec3 vec3_add(t_vec3 a, t_vec3 b); +t_vec3 vec3_sub(t_vec3 a, t_vec3 b); +t_vec3 vec3_scale(t_vec3 a, float s); +float vec3_dot(t_vec3 a, t_vec3 b); +t_vec3 vec3_cross(t_vec3 a, t_vec3 b); +float vec3_length(t_vec3 a); +t_vec3 vec3_normalize(t_vec3 a); +t_vec3 vec3_mul(t_vec3 a, t_vec3 b); +t_scene create_scene(void); #endif diff --git a/raytracer_formatted.c b/raytracer_formatted.c index f554356..9863d8b 100644 --- a/raytracer_formatted.c +++ b/raytracer_formatted.c @@ -6,7 +6,7 @@ /* By: yantoine +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/02/13 19:56:17 by yantoine #+# #+# */ -/* Updated: 2025/02/13 20:16:00 by yantoine ### ########.fr */ +/* Updated: 2025/02/13 21:23:47 by yantoine ### ########.fr */ /* */ /* ************************************************************************** */ @@ -21,17 +21,6 @@ *Si aucun fichier n'est passé en argument, une scène par défaut est utilisée. */ -Sphere spheres[MAX_SPHERES]; -int numSpheres = 0; - -Plane planes[MAX_PLANES]; -int numPlanes = 0; - -Cylinder cylinders[MAX_CYLINDERS]; -int numCylinders = 0; - -Light lights[MAX_LIGHTS]; -int numLights = 0; // Ambient et caméra float ambient_ratio = 0.1f; diff --git a/scene.c b/scene.c new file mode 100644 index 0000000..d59a8c8 --- /dev/null +++ b/scene.c @@ -0,0 +1,21 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* scene.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: yantoine +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2025/02/13 21:23:32 by yantoine #+# #+# */ +/* Updated: 2025/02/13 21:26:52 by yantoine ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "miniRT.h" + +t_scene create_scene(void) +{ + t_scene scene; + + scene = ft_bzero(sizeof(t_scene)); + return (scene); +} diff --git a/tags b/tags index 8f790b3..a6a8ca4 100644 --- a/tags +++ b/tags @@ -35,14 +35,23 @@ !_TAG_KIND_DESCRIPTION!C++ t,typedef /typedefs/ !_TAG_KIND_DESCRIPTION!C++ u,union /union names/ !_TAG_KIND_DESCRIPTION!C++ v,variable /variable definitions/ +!_TAG_KIND_DESCRIPTION!Markdown S,subsection /level 2 sections/ +!_TAG_KIND_DESCRIPTION!Markdown T,l4subsection /level 4 sections/ +!_TAG_KIND_DESCRIPTION!Markdown c,chapter /chapters/ +!_TAG_KIND_DESCRIPTION!Markdown h,hashtag /hashtags/ +!_TAG_KIND_DESCRIPTION!Markdown n,footnote /footnotes/ +!_TAG_KIND_DESCRIPTION!Markdown s,section /sections/ +!_TAG_KIND_DESCRIPTION!Markdown t,subsubsection /level 3 sections/ +!_TAG_KIND_DESCRIPTION!Markdown u,l5subsection /level 5 sections/ !_TAG_OUTPUT_EXCMD mixed /number, pattern, mixed, or combineV2/ !_TAG_OUTPUT_FILESEP slash /slash or backslash/ !_TAG_OUTPUT_MODE u-ctags /u-ctags or e-ctags/ !_TAG_OUTPUT_VERSION 0.0 /current.age/ !_TAG_PARSER_VERSION!C 1.1 /current.age/ !_TAG_PARSER_VERSION!C++ 1.1 /current.age/ +!_TAG_PARSER_VERSION!Markdown 1.1 /current.age/ !_TAG_PATTERN_LENGTH_LIMIT 96 /0 for no limit/ -!_TAG_PROC_CWD /home/null/Documents/final/new_better_ray/ // +!_TAG_PROC_CWD /home/null/Documents/better_ray_tracer/ // !_TAG_PROGRAM_AUTHOR Universal Ctags Team // !_TAG_PROGRAM_NAME Universal Ctags /Derived from Exuberant Ctags/ !_TAG_PROGRAM_URL https://ctags.io/ /official site/ @@ -69,53 +78,66 @@ MINIRT_H miniRT.h /^# define MINIRT_H$/;" d WIDTH miniRT.h /^# define WIDTH /;" d ambient_color raytracer_formatted.c /^t_vec3 ambient_color = {0.1f, 0.1f, 0.1f};$/;" v typeref:typename:t_vec3 ambient_ratio raytracer_formatted.c /^float ambient_ratio = 0.1f;$/;" v typeref:typename:float -axis miniRT.h /^ t_vec3 axis;\/\/ Axe normalisé$/;" m struct:s_vec3 typeref:typename:t_vec3 -brightness miniRT.h /^ float brightness;$/;" m struct:s_vec3 typeref:typename:float +axis miniRT.h /^ t_vec3 axis; \/\/ Axe normalisé$/;" m struct:s_cylinder typeref:typename:t_vec3 +better_ray_tracer README.md /^# better_ray_tracer/;" c +brightness miniRT.h /^ float brightness;$/;" m struct:s_light typeref:typename:float camDir raytracer_formatted.c /^t_vec3 camDir = {0.0f, 0.0f, -1.0f};$/;" v typeref:typename:t_vec3 camPos raytracer_formatted.c /^t_vec3 camPos = {0.0f, 0.0f, 0.0f};$/;" v typeref:typename:t_vec3 -center miniRT.h /^ t_vec3 center;$/;" m struct:s_vec3 typeref:typename:t_vec3 -color miniRT.h /^ t_vec3 color;$/;" m struct:s_vec3 typeref:typename:t_vec3 -cylinders raytracer_formatted.c /^Cylinder cylinders[MAX_CYLINDERS];$/;" v typeref:typename:Cylinder[] -dir miniRT.h /^ t_vec3 dir;$/;" m struct:s_vec3 typeref:typename:t_vec3 +center miniRT.h /^ t_vec3 center;$/;" m struct:s_cylinder typeref:typename:t_vec3 +center miniRT.h /^ t_vec3 center;$/;" m struct:s_sphere typeref:typename:t_vec3 +color miniRT.h /^ t_vec3 color;$/;" m struct:s_cylinder typeref:typename:t_vec3 +color miniRT.h /^ t_vec3 color;$/;" m struct:s_light typeref:typename:t_vec3 +color miniRT.h /^ t_vec3 color;$/;" m struct:s_plane typeref:typename:t_vec3 +color miniRT.h /^ t_vec3 color;$/;" m struct:s_sphere typeref:typename:t_vec3 +create_scene scene.c /^t_scene create_scene(void)$/;" f typeref:typename:t_scene +cylinders miniRT.h /^ t_cylinder cylinders[MAX_CYLINDERS];$/;" m struct:s_scene typeref:typename:t_cylinder[] +dir miniRT.h /^ t_vec3 dir;$/;" m struct:s_ray typeref:typename:t_vec3 fov raytracer_formatted.c /^float fov = 90.0f;$/;" v typeref:typename:float -height miniRT.h /^ float height;$/;" m struct:s_vec3 typeref:typename:float +height miniRT.h /^ float height;$/;" m struct:s_cylinder typeref:typename:float intersectCylinder raytracer_formatted.c /^float intersectCylinder(Ray ray, Cylinder cy, t_vec3 *hitNormal)$/;" f typeref:typename:float intersectPlane raytracer_formatted.c /^float intersectPlane(Ray ray, Plane p, t_vec3 *hitNormal)$/;" f typeref:typename:float intersectSphere raytracer_formatted.c /^float intersectSphere(Ray ray, Sphere s, t_vec3 *hitNormal)$/;" f typeref:typename:float isInShadow raytracer_formatted.c /^bool isInShadow(t_vec3 hitPoint, t_vec3 lightPos)$/;" f typeref:typename:bool -lights raytracer_formatted.c /^Light lights[MAX_LIGHTS];$/;" v typeref:typename:Light[] +lights miniRT.h /^ t_light lights[MAX_LIGHTS];$/;" m struct:s_scene typeref:typename:t_light[] load_config raytracer_formatted.c /^void load_config(const char *filename)$/;" f typeref:typename:void main raytracer_formatted.c /^int main(int argc, char *argv[])$/;" f typeref:typename:int -normal miniRT.h /^ t_vec3 normal;$/;" m struct:s_vec3 typeref:typename:t_vec3 -numCylinders raytracer_formatted.c /^int numCylinders = 0;$/;" v typeref:typename:int -numLights raytracer_formatted.c /^int numLights = 0;$/;" v typeref:typename:int -numPlanes raytracer_formatted.c /^int numPlanes = 0;$/;" v typeref:typename:int -numSpheres raytracer_formatted.c /^int numSpheres = 0;$/;" v typeref:typename:int -origin miniRT.h /^ t_vec3 origin;$/;" m struct:s_vec3 typeref:typename:t_vec3 +normal miniRT.h /^ t_vec3 normal;$/;" m struct:s_plane typeref:typename:t_vec3 +numCylinders miniRT.h /^ int numCylinders;$/;" m struct:s_scene typeref:typename:int +numLights miniRT.h /^ int numLights;$/;" m struct:s_scene typeref:typename:int +numPlanes miniRT.h /^ int numPlanes;$/;" m struct:s_scene typeref:typename:int +numSpheres miniRT.h /^ int numSpheres;$/;" m struct:s_scene typeref:typename:int +origin miniRT.h /^ t_vec3 origin;$/;" m struct:s_ray typeref:typename:t_vec3 pitch raytracer_formatted.c /^float yaw = 0.0f, pitch = 0.0f; \/\/ en radians$/;" v typeref:typename:float -planes raytracer_formatted.c /^Plane planes[MAX_PLANES];$/;" v typeref:typename:Plane[] -point miniRT.h /^ t_vec3 point;$/;" m struct:s_vec3 typeref:typename:t_vec3 -pos miniRT.h /^ t_vec3 pos;$/;" m struct:s_vec3 typeref:typename:t_vec3 -radius miniRT.h /^ float radius;$/;" m struct:s_vec3 typeref:typename:float -radius miniRT.h /^ float radius;\/\/ Demi-diamètre$/;" m struct:s_vec3 typeref:typename:float +planes miniRT.h /^ t_plane planes[MAX_PLANES];$/;" m struct:s_scene typeref:typename:t_plane[] +point miniRT.h /^ t_vec3 point;$/;" m struct:s_plane typeref:typename:t_vec3 +pos miniRT.h /^ t_vec3 pos;$/;" m struct:s_light typeref:typename:t_vec3 +radius miniRT.h /^ float radius;$/;" m struct:s_sphere typeref:typename:float +radius miniRT.h /^ float radius; \/\/ Demi-diamètre$/;" m struct:s_cylinder typeref:typename:float +s_cylinder miniRT.h /^typedef struct s_cylinder$/;" s +s_light miniRT.h /^typedef struct s_light$/;" s +s_plane miniRT.h /^typedef struct s_plane$/;" s +s_ray miniRT.h /^typedef struct s_ray$/;" s +s_scene miniRT.h /^typedef struct s_scene$/;" s +s_sphere miniRT.h /^typedef struct s_sphere$/;" s s_vec3 miniRT.h /^typedef struct s_vec3$/;" s -spheres raytracer_formatted.c /^Sphere spheres[MAX_SPHERES];$/;" v typeref:typename:Sphere[] -t_cylinder miniRT.h /^} t_cylinder;$/;" t typeref:struct:s_vec3 -t_light miniRT.h /^} t_light;$/;" t typeref:struct:s_vec3 -t_plane miniRT.h /^} t_plane;$/;" t typeref:struct:s_vec3 -t_ray miniRT.h /^} t_ray;$/;" t typeref:struct:s_vec3 -t_sphere miniRT.h /^} t_sphere;$/;" t typeref:struct:s_vec3 -t_vec3 miniRT.h /^} t_vec3;$/;" t typeref:struct:s_vec3 +spheres miniRT.h /^ t_sphere spheres[MAX_SPHERES];$/;" m struct:s_scene typeref:typename:t_sphere[] +t_cylinder miniRT.h /^} t_cylinder;$/;" t typeref:struct:s_cylinder +t_light miniRT.h /^} t_light;$/;" t typeref:struct:s_light +t_plane miniRT.h /^} t_plane;$/;" t typeref:struct:s_plane +t_ray miniRT.h /^} t_ray;$/;" t typeref:struct:s_ray +t_scene miniRT.h /^} t_scene;$/;" t typeref:struct:s_scene +t_sphere miniRT.h /^} t_sphere;$/;" t typeref:struct:s_sphere +t_vec3 miniRT.h /^} t_vec3;$/;" t typeref:struct:s_vec3 trace raytracer_formatted.c /^t_vec3 trace(Ray ray)$/;" f typeref:typename:t_vec3 vec3_add calcul_de_vecteur.c /^t_vec3 vec3_add(t_vec3 a, t_vec3 b)$/;" f typeref:typename:t_vec3 vec3_cross calcul_de_vecteur.c /^t_vec3 vec3_cross(t_vec3 a, t_vec3 b)$/;" f typeref:typename:t_vec3 vec3_dot calcul_de_vecteur.c /^float vec3_dot(t_vec3 a, t_vec3 b)$/;" f typeref:typename:float -vec3_length calcul_de_vecteur.c /^float vec3_length(t_vec3 a)$/;" f typeref:typename:float -vec3_mul calcul_de_vecteur.c /^t_vec3 vec3_mul(t_vec3 a, t_vec3 b)$/;" f typeref:typename:t_vec3 -vec3_normalize calcul_de_vecteur.c /^t_vec3 vec3_normalize(t_vec3 a)$/;" f typeref:typename:t_vec3 +vec3_length calcul_de_vecteur2.c /^float vec3_length(t_vec3 a)$/;" f typeref:typename:float +vec3_mul calcul_de_vecteur2.c /^t_vec3 vec3_mul(t_vec3 a, t_vec3 b)$/;" f typeref:typename:t_vec3 +vec3_normalize calcul_de_vecteur2.c /^t_vec3 vec3_normalize(t_vec3 a)$/;" f typeref:typename:t_vec3 vec3_scale calcul_de_vecteur.c /^t_vec3 vec3_scale(t_vec3 a, float s)$/;" f typeref:typename:t_vec3 vec3_sub calcul_de_vecteur.c /^t_vec3 vec3_sub(t_vec3 a, t_vec3 b)$/;" f typeref:typename:t_vec3 -x miniRT.h /^ float x;$/;" m struct:s_vec3 typeref:typename:float -y miniRT.h /^ float y;$/;" m struct:s_vec3 typeref:typename:float +x miniRT.h /^ float x;$/;" m struct:s_vec3 typeref:typename:float +y miniRT.h /^ float y;$/;" m struct:s_vec3 typeref:typename:float yaw raytracer_formatted.c /^float yaw = 0.0f, pitch = 0.0f; \/\/ en radians$/;" v typeref:typename:float -z miniRT.h /^ float z;$/;" m struct:s_vec3 typeref:typename:float +z miniRT.h /^ float z;$/;" m struct:s_vec3 typeref:typename:float