#pragma once #include "tuples.h" #include "matrices.h" struct ray { struct tuple origin; struct tuple direction; }; inline static struct ray ray(struct tuple origin, struct tuple direction) { return (struct ray){origin, direction}; } inline static struct tuple ray_position(struct ray ray, float t) { return tuple_add(ray.origin, tuple_mul(ray.direction, t)); } inline static struct ray ray_transform(struct ray r, struct mat4x4 m) { return ray(mat4x4_mul_t(m, r.origin), mat4x4_mul_t(m, r.direction)); }