diff options
Diffstat (limited to 'shaders')
| -rw-r--r-- | shaders/compute.comp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/shaders/compute.comp b/shaders/compute.comp index b70b021..3510d52 100644 --- a/shaders/compute.comp +++ b/shaders/compute.comp @@ -34,6 +34,11 @@ struct sphere { float[3] padding; }; +struct aabb { + vec4 min; + vec4 max; +}; + struct camera { vec4 position; @@ -88,6 +93,29 @@ float rand(vec2 co) { return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453); } +bool hit_aabb(aabb b, ray r, float min_t, float max_t) { + for (int axis_index = 0; axis_index < 3; axis_index++) { + float inv_dir = 1.f / r.direction[axis_index]; + float t0 = (b.min[axis_index] - r.origin[axis_index]) * inv_dir; + float t1 = (b.max[axis_index] - r.origin[axis_index]) * inv_dir; + + if (inv_dir < 0.f) { + float temp = t0; + t0 = t1; + t1 = t0; + } + + min_t = max(t0, min_t); + max_t = min(t1, max_t); + + if (max_t < min_t) { + return false; + } + } + + return true; +} + bool hit_sphere(sphere s, ray r, float min_t, float max_t, out hit_info info) { vec3 origin_center = r.origin - s.position.xyz; |
