summaryrefslogtreecommitdiff
path: root/assets/final/shaders/ray_box.wgsl
diff options
context:
space:
mode:
Diffstat (limited to 'assets/final/shaders/ray_box.wgsl')
-rw-r--r--assets/final/shaders/ray_box.wgsl16
1 files changed, 16 insertions, 0 deletions
diff --git a/assets/final/shaders/ray_box.wgsl b/assets/final/shaders/ray_box.wgsl
new file mode 100644
index 0000000..d56ea1b
--- /dev/null
+++ b/assets/final/shaders/ray_box.wgsl
@@ -0,0 +1,16 @@
+struct RayBounds {
+ t_entry: f32,
+ t_exit: f32,
+ hit: bool,
+};
+
+fn ray_box_intersection(ro: vec3<f32>, rd: vec3<f32>, extent: vec3<f32>) -> RayBounds {
+ let inv_rd = 1.0 / rd;
+ let t0 = (-extent - ro) * inv_rd;
+ let t1 = (extent - ro) * inv_rd;
+ let tmin_vec = min(t0, t1);
+ let tmax_vec = max(t0, t1);
+ let t_entry = max(0.0, max(tmin_vec.x, max(tmin_vec.y, tmin_vec.z)));
+ let t_exit = min(tmax_vec.x, min(tmax_vec.y, tmax_vec.z));
+ return RayBounds(t_entry, t_exit, t_entry <= t_exit);
+}