raytracer-c/module_patterns/uv_pattern.h
2023-10-07 19:55:56 -04:00

36 lines
1.4 KiB
C

#ifndef SIMPLE_RAYTRACER_UV_PATTERN_H
#define SIMPLE_RAYTRACER_UV_PATTERN_H
#include <canvas.h>
#include <tuples.h>
typedef struct UV_Pattern UV_Pattern;
enum UV_PATTERN_Cube_Face {
UV_PATTERN_LEFT,
UV_PATTERN_RIGHT,
UV_PATTERN_FRONT,
UV_PATTERN_BACK,
UV_PATTERN_UP,
UV_PATTERN_DOWN,
UV_PATTERN_SIZE
};
UV_Pattern *UV_PATTERN_new_align_check(const TUPLES_Color *main, const TUPLES_Color *ul, const TUPLES_Color* ur, const TUPLES_Color* bl, const TUPLES_Color* br);
UV_Pattern *UV_PATTERN_new_checkers(unsigned int u, unsigned int v, const TUPLES_Color *a, const TUPLES_Color *b);
UV_Pattern *UV_PATTERN_new_image(const CANVAS_Canvas *canvas);
void UV_PATTERN_delete(UV_Pattern *pattern);
#define UV_PATTERN_delete_all(...) UTILITIES_fn_apply(UV_Pattern, UV_PATTERN_delete, __VA_ARGS__);
UV_Pattern *UV_PATTERN_copy(const UV_Pattern *src);
void UV_PATTERN_pattern_at(TUPLES_Color* result, UV_Pattern* patter, double u, double v);
//map functions map 3d point on a shape to a 2d uv-pattern
void UV_PATTERN_spherical_map(double* u, double* v, const TUPLES_Point* point);
void UV_PATTERN_planar_map(double* u, double* v, const TUPLES_Point* point);
void UV_PATTERN_cylinder_map(double* u, double* v, const TUPLES_Point* point);
void UV_PATTERN_cube_map(double* u, double* v, enum UV_PATTERN_Cube_Face face, const TUPLES_Point* point);
enum UV_PATTERN_Cube_Face UV_PATTERN_face_from_point(const TUPLES_Point *point);
#endif // SIMPLE_RAYTRACER_UV_PATTERN_H