Advertisement
Guest User

Untitled

a guest
Sep 29th, 2017
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
D 0.68 KB | None | 0 0
  1.  
  2. bool rayHitsAABB(vec3f a, vec3f b, vec3f pos, vec3f dir) {
  3.   for int i <- 0..3
  4.     if (dir[i] < 0) { float _o = a[i]; a[i] = -b[i]; b[i] = -_o; pos[i] = -pos[i]; dir[i] = -dir[i]; }
  5.  
  6.   // pretend ray starts at origin
  7.   a -= pos;
  8.   b -= pos;
  9.   if (b.x < 0 || b.y < 0 || b.z < 0) return false; // ray is pointed away from aabb.
  10.   // multiply every component with dir.(x*y*z)
  11.   // vec3f dista = a / dir, distb = b / dir;
  12.   vec3f mulfac = vec3f(dir.(y * z, x * z, x * y));
  13.   vec3f dista = a * mulfac, distb = b * mulfac;
  14.  
  15.   float entry = max(dista.x, max(dista.y, dista.z));
  16.   float exit = min(distb.x, min(distb.y, distb.z));
  17.   if (entry <= exit) return true;
  18.   return false;
  19. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement