34 lines
735 B
Zig

const std = @import("std");
const vec = @import("./vec.zig");
const Vec3 = vec.Vec3;
const Point3 = vec.Point3;
pub const Ray = struct {
orig: Vec3,
dir: Vec3,
pub fn init(orig: Point3, dir: Vec3) Ray {
return Ray{
.orig = orig,
.dir = dir,
};
}
pub fn origin(ray: Ray) Point3 {
return ray.orig;
}
pub fn direction(ray: Ray) Vec3 {
return ray.dir;
}
pub fn at(ray: Ray, t: f32) Point3 {
return ray.orig.add(ray.dir.scale(t));
}
};
test "ray_at" {
const want = Point3.init(0, 0, 1.5);
const r = Ray.init(Point3.init(0, 0, 0), Vec3.init(0, 0, 1));
const got = r.at(1.5);
try std.testing.expectEqual(want, got);
}