26 lines
533 B
C
26 lines
533 B
C
#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));
|
|
}
|