Method: CyberarmEngine::Ray#intersect_bounding_box?

Defined in:
lib/cyberarm_engine/ray.rb

#intersect_bounding_box?(box) ⇒ Boolean

Returns:

  • (Boolean)


23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/cyberarm_engine/ray.rb', line 23

def intersect_bounding_box?(box)
  tmin = -@range
  tmax = @range

  tx1 = (box.min.x - @origin.x) * @inverse_direction.x
  tx2 = (box.max.x - @origin.x) * @inverse_direction.x

  tmin = max(tmin, min(tx1, tx2))
  tmax = min(tmax, max(tx1, tx2))

  ty1 = (box.min.y - @origin.y) * @inverse_direction.y
  ty2 = (box.max.y - @origin.y) * @inverse_direction.y

  tmin = max(tmin, min(ty1, ty2))
  tmax = min(tmax, max(ty1, ty2))

  tz1 = (box.min.z - @origin.z) * @inverse_direction.z
  tz2 = (box.max.z - @origin.z) * @inverse_direction.z

  tmin = max(tmin, min(tz1, tz2))
  tmax = min(tmax, max(tz1, tz2))

  tmax >= max(tmin, 0.0)
end