25 lines
705 B
Forth
25 lines
705 B
Forth
type ray {
|
|
orig: vec3 # point
|
|
dir: vec3
|
|
}
|
|
|
|
# A little different from the constructor at https://raytracing.github.io/books/RayTracingInOneWeekend.html
|
|
# We immediately normalize the direction vector so we don't have to keep doing
|
|
# so.
|
|
fn initialize-ray _self: (addr ray), o: (addr vec3), d: (addr vec3) {
|
|
var self/esi: (addr ray) <- copy _self
|
|
var dest/eax: (addr vec3) <- get self, orig
|
|
copy-object o, dest
|
|
dest <- get self, dir
|
|
vec3-unit d, dest
|
|
}
|
|
|
|
fn ray-at _self: (addr ray), t: float, out: (addr vec3) {
|
|
var self/esi: (addr ray) <- copy _self
|
|
var src/eax: (addr vec3) <- get self, dir
|
|
copy-object src, out
|
|
vec3-scale-up out, t
|
|
src <- get self, orig
|
|
vec3-add-to out, src
|
|
}
|