about summary refs log tree commit diff stats
path: root/linux/apps/raytracing/ray.mu
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2021-07-16 08:09:42 -0700
committerKartik K. Agaram <vc@akkartik.com>2021-07-16 08:28:56 -0700
commit44d26b77c45668c9b0c99894a4294cec004361fe (patch)
tree68a5dcd4971873efd4ce184e9bf9a531c2161813 /linux/apps/raytracing/ray.mu
parentac45f097153afd3a89f43886e4124c5b2c26b98a (diff)
downloadmu-44d26b77c45668c9b0c99894a4294cec004361fe.tar.gz
.
Diffstat (limited to 'linux/apps/raytracing/ray.mu')
-rw-r--r--linux/apps/raytracing/ray.mu24
1 files changed, 24 insertions, 0 deletions
diff --git a/linux/apps/raytracing/ray.mu b/linux/apps/raytracing/ray.mu
new file mode 100644
index 00000000..20cc42e9
--- /dev/null
+++ b/linux/apps/raytracing/ray.mu
@@ -0,0 +1,24 @@
+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
+}