RT
librt.h
Go to the documentation of this file.
1 /* ************************************************************************** */
2 /* */
3 /* ::: :::::::: */
4 /* librt.h :+: :+: :+: */
5 /* +:+ +:+ +:+ */
6 /* By: sklepper <sklepper@student.42.fr> +#+ +:+ +#+ */
7 /* +#+#+#+#+#+ +#+ */
8 /* Created: 2018/11/18 00:15:12 by nihuynh #+# #+# */
9 /* Updated: 2019/06/26 22:29:36 by sklepper ### ########.fr */
10 /* */
11 /* ************************************************************************** */
12 
13 #ifndef LIBRT_H
14 # define LIBRT_H
15 
16 # include "rtstruct.h"
17 
18 # define DEG_TO_RAD (M_PI_F / 180)
19 # define M_PI_F (float)M_PI
20 # define M_INV_PI_F (1.0f / M_PI_F)
21 
22 # define EPSILON 1e-6
23 # define SHADOW_BIAS 5e-2
24 
25 # define AAAA quad[0]
26 # define BBBB quad[1]
27 # define CCCC quad[2]
28 # define DDDD quad[3]
29 # define EEEE quad[4]
30 
31 /*
32 ** Normal :
33 */
34 
35 void normal_sphere(t_inter *inter);
36 void normal_cone(t_inter *inter);
37 void normal_cube(t_inter *inter);
38 void normal_tore(t_inter *inter);
39 void normal_cylinder(t_inter *inter);
40 void normal_plane(t_inter *inter);
41 
44 t_vec3 get_cone_uv(t_inter *inter);
45 t_vec3 get_cube_uv(t_inter *inter);
46 t_vec3 get_tore_uv(t_inter *inter);
48 /*
49 ** Intersection :
50 */
51 
52 void inter_cylinder(t_inter *data, t_obj *node);
53 void inter_plane(t_inter *data, t_obj *node);
54 void inter_sphere(t_inter *data, t_obj *node);
55 void inter_cone(t_inter *data, t_obj *node);
56 void set_min_max_corner(t_cube *cube);
57 void inter_cube(t_inter *data, t_obj *node);
58 void inter_tore(t_inter *data, t_obj *node);
59 t_inter inter_from_csg_op(int type, t_inter left, t_inter right,
60  t_ray incoming);
61 void inter_csg(t_inter *data, t_obj *node);
62 void inter_set(t_inter *inter, t_ray ray);
63 void inter_setdeflect(t_inter *inter, t_vec3 shading_normal);
64 void inter_setrefract(t_inter *inter, t_ray *res);
65 void inter_find(t_inter *primary, t_pt3 *value);
66 bool inter_plane_finite(t_inter *data, t_plane *plane, float dist);
67 
68 /*
69 ** Light :
70 */
71 
72 void inter_setlight(t_inter *i, t_inter *light_i, t_light *light);
73 
74 /*
75 ** Vec3 :
76 */
77 
78 void vec3_find(t_pt3 *origin, t_pt3 *dest, t_vec3 *value);
79 void vec3_cpy(t_vec3 *dst, t_vec3 *src);
80 void vec3_new(t_vec3 *res, float x, float y, float z);
81 void vec3_add(t_vec3 *res, t_vec3 *v1, t_vec3 *v2);
82 float vec3_cos(t_vec3 *v1, t_vec3 *v2);
84 void create_orthobasis_qnd(t_vec3 vec, t_vec3 *t, t_vec3 *b);
85 float vec3_dot(t_vec3 *v1, t_vec3 *v2);
86 float vec3_mag(t_vec3 v1);
87 void vec3_normalize(t_vec3 *v1);
89 void vec3_print(t_vec3 *data);
90 void vec3_print_(char *msg, t_vec3 data);
91 void vec3_scalar(t_vec3 *v1, float k);
92 void vec3_sub(t_vec3 *res, t_vec3 *v1, t_vec3 *v2);
94 void vec3_mul(t_vec3 *res, t_vec3 *v1, t_vec3 *v2);
96 t_vec3 vec3_deflect(t_vec3 vec, t_vec3 normal);
97 t_vec3 vec3_refract(t_vec3 ray, t_vec3 normal, float ior);
98 void vec3_cartesian_to_spherical(t_vec3 v, float *azimuth, float *polar);
99 void vec3_matrix_camera(t_matrix *matrix, t_cam *cam);
100 void vec3_matrix_mult(t_matrix *matrix, t_matrix *add);
101 t_matrix matrix_mult(const t_matrix *lhs, const t_matrix *rhs);
102 t_matrix mat_orbit(t_vec3 axis, float deg);
103 t_vec3 get_column(t_matrix m, int column);
104 void set_column(t_matrix *m, int column, t_vec3 vec);
105 void set_row(t_matrix *m, int row, t_vec3 vec);
107 void mat_transpose(t_matrix *m);
108 void apply_matrix(t_vec3 *v, t_matrix *mat);
109 void ray_new(t_ray *res, t_pt3 *origin, t_vec3 *n);
110 void print_matrix(t_matrix *mat);
111 void mat3_rot(t_matrix *mat_x, t_matrix *mat_y, t_vec3 *vi, t_cam *cam);
113 t_matrix set_rotation(float yz_angle, float xz_angle);
114 float fresnel(t_vec3 ray_dir, t_vec3 normal, float ior);
115 void ray_offset_origin(t_ray *ray, t_vec3 normal);
117 void apply_uv_mapping(t_vec3 *uv, t_uv_mapping mapping);
118 float remap_to_0_to_1(float x);
119 
120 #endif
print_matrix
void print_matrix(t_matrix *mat)
Definition: print_matrix.c:16
vec3_dot
float vec3_dot(t_vec3 *v1, t_vec3 *v2)
Definition: vec3_dot.c:15
s_ray
Definition: rtstruct.h:44
s_cam
Definition: rtstruct.h:130
inter_from_csg_op
t_inter inter_from_csg_op(int type, t_inter left, t_inter right, t_ray incoming)
Definition: inter_csg_op.c:86
normal_tore
void normal_tore(t_inter *inter)
Definition: normal_tore.c:15
normal_cone
void normal_cone(t_inter *inter)
Definition: normal_cone.c:16
vec3_sub_
t_vec3 vec3_sub_(t_vec3 a, t_vec3 b)
Definition: vec3_sub.c:24
s_vec3
Definition: rtstruct.h:30
inter_set
void inter_set(t_inter *inter, t_ray ray)
Definition: inter_set.c:17
s_cube
Definition: rtstruct.h:100
inter_cube
void inter_cube(t_inter *data, t_obj *node)
Definition: inter_cube.c:87
set_rotation
t_matrix set_rotation(float yz_angle, float xz_angle)
Definition: mat3_rot.c:51
vec3_normalize_
t_vec3 vec3_normalize_(t_vec3 v1)
Definition: vec3_normalize.c:30
create_orthobasis_from_y_axis
void create_orthobasis_from_y_axis(t_vec3 y, t_vec3 *x, t_vec3 *z)
Definition: mat3_rot.c:68
s_uv_mapping
Definition: rtstruct.h:177
apply_uv_mapping
void apply_uv_mapping(t_vec3 *uv, t_uv_mapping mapping)
Definition: uv_mapping.c:17
get_cone_uv
t_vec3 get_cone_uv(t_inter *inter)
Definition: inter_cone.c:118
apply_matrix
void apply_matrix(t_vec3 *v, t_matrix *mat)
Definition: vec3_matrix_apply.c:17
vec3_print
void vec3_print(t_vec3 *data)
vec3_normalize
void vec3_normalize(t_vec3 *v1)
Definition: vec3_normalize.c:15
s_obj
Definition: rtstruct.h:245
vec3_add
void vec3_add(t_vec3 *res, t_vec3 *v1, t_vec3 *v2)
Definition: vec3_add.c:16
normal_plane
void normal_plane(t_inter *inter)
Definition: normal_plane.c:15
normal_cube
void normal_cube(t_inter *inter)
Definition: normal_cube.c:44
inter_tore
void inter_tore(t_inter *data, t_obj *node)
Definition: inter_tore.c:57
vec3_mag
float vec3_mag(t_vec3 v1)
Definition: vec3_mag.c:16
ray_offset_origin
void ray_offset_origin(t_ray *ray, t_vec3 normal)
Definition: ray_offset_origin.c:15
inter_sphere
void inter_sphere(t_inter *data, t_obj *node)
Definition: inter_sphere.c:69
vec3_scalar
void vec3_scalar(t_vec3 *v1, float k)
Definition: vec3_scalar.c:15
vec3_print_
void vec3_print_(char *msg, t_vec3 data)
Definition: vec3_print.c:21
get_cylinder_uv
t_vec3 get_cylinder_uv(t_inter *inter)
Definition: inter_cylinder.c:115
set_min_max_corner
void set_min_max_corner(t_cube *cube)
Definition: inter_cube.c:17
vec3_cpy
void vec3_cpy(t_vec3 *dst, t_vec3 *src)
Definition: vec3_cpy.c:15
ray_new
void ray_new(t_ray *res, t_pt3 *origin, t_vec3 *n)
Definition: ray_new.c:16
get_plane_uv
t_vec3 get_plane_uv(t_inter *inter)
Definition: inter_plane.c:66
mat_transpose
void mat_transpose(t_matrix *m)
Definition: mat_transpose.c:15
vec3_mul
void vec3_mul(t_vec3 *res, t_vec3 *v1, t_vec3 *v2)
Definition: vec3_mul.c:15
normal_cylinder
void normal_cylinder(t_inter *inter)
Definition: normal_cylinder.c:15
get_column
t_vec3 get_column(t_matrix m, int column)
Definition: mat3.c:35
remap_to_0_to_1
float remap_to_0_to_1(float x)
Definition: uv_mapping.c:37
mat3_rot
void mat3_rot(t_matrix *mat_x, t_matrix *mat_y, t_vec3 *vi, t_cam *cam)
vec3_find
void vec3_find(t_pt3 *origin, t_pt3 *dest, t_vec3 *value)
Definition: vec3_find.c:15
vec3_refract
t_vec3 vec3_refract(t_vec3 ray, t_vec3 normal, float ior)
Definition: vec3_refract.c:18
vec3_cross
t_vec3 vec3_cross(t_vec3 v1, t_vec3 v2)
Definition: vec3_cross.c:15
s_matrix
Definition: rtstruct.h:39
inter_cylinder
void inter_cylinder(t_inter *data, t_obj *node)
Definition: inter_cylinder.c:101
vec3_cartesian_to_spherical
void vec3_cartesian_to_spherical(t_vec3 v, float *azimuth, float *polar)
Definition: vec3_spherical_cartesian.c:21
create_orthobasis_qnd
void create_orthobasis_qnd(t_vec3 vec, t_vec3 *t, t_vec3 *b)
Definition: normal_mapping.c:23
rtstruct.h
get_tore_uv
t_vec3 get_tore_uv(t_inter *inter)
Definition: inter_tore.c:71
inter_setrefract
void inter_setrefract(t_inter *inter, t_ray *res)
Definition: inter_setrefract.c:15
matrix_mult
t_matrix matrix_mult(const t_matrix *lhs, const t_matrix *rhs)
Definition: mat3.c:15
s_plane
Definition: rtstruct.h:50
inter_plane
void inter_plane(t_inter *data, t_obj *node)
Definition: inter_plane.c:52
vec3_cos
float vec3_cos(t_vec3 *v1, t_vec3 *v2)
Definition: vec3_cos.c:16
get_sphere_uv
t_vec3 get_sphere_uv(t_inter *inter)
Definition: inter_sphere.c:83
set_column
void set_column(t_matrix *m, int column, t_vec3 vec)
Definition: mat3.c:43
vec3_mul_
t_vec3 vec3_mul_(t_vec3 a, t_vec3 b)
Definition: vec3_mul.c:24
mat_orbit
t_matrix mat_orbit(t_vec3 axis, float deg)
Definition: mat_orbit.c:36
vec3_matrix_mult
void vec3_matrix_mult(t_matrix *matrix, t_matrix *add)
Definition: vec3_matrix_mult.c:16
normal_sphere
void normal_sphere(t_inter *inter)
Definition: normal_sphere.c:15
mat_set_axes
t_matrix mat_set_axes(t_vec3 x, t_vec3 y, t_vec3 z)
Definition: mat3.c:57
s_inter
Definition: rtstruct.h:218
fresnel
float fresnel(t_vec3 ray_dir, t_vec3 normal, float ior)
Definition: fresnel.c:17
get_cube_uv
t_vec3 get_cube_uv(t_inter *inter)
Definition: inter_cube.c:112
vec3_matrix_camera
void vec3_matrix_camera(t_matrix *matrix, t_cam *cam)
vec3_new
void vec3_new(t_vec3 *res, float x, float y, float z)
Definition: vec3_new.c:15
inter_plane_finite
bool inter_plane_finite(t_inter *data, t_plane *plane, float dist)
Definition: inter_plane_finite.c:80
inter_find
void inter_find(t_inter *primary, t_pt3 *value)
Definition: inter_find.c:15
vec3_deflect
t_vec3 vec3_deflect(t_vec3 vec, t_vec3 normal)
Definition: vec3_deflect.c:16
inter_setlight
void inter_setlight(t_inter *i, t_inter *light_i, t_light *light)
Definition: inter_setlight.c:16
set_row
void set_row(t_matrix *m, int row, t_vec3 vec)
Definition: mat3.c:50
ray_transform
t_ray ray_transform(t_ray ray, t_matrix m)
Definition: ray_transform.c:15
inter_cone
void inter_cone(t_inter *data, t_obj *node)
Definition: inter_cone.c:104
inter_csg
void inter_csg(t_inter *data, t_obj *node)
Definition: inter_csg.c:46
vec3_sub
void vec3_sub(t_vec3 *res, t_vec3 *v1, t_vec3 *v2)
Definition: vec3_sub.c:15
inter_setdeflect
void inter_setdeflect(t_inter *inter, t_vec3 shading_normal)
Definition: inter_setdeflect.c:15
s_light
Definition: rtstruct.h:121