Pastebin launched a little side project called VERYVIRAL.com, check it out ;-) Want more features on Pastebin? Sign Up, it's FREE!
Guest

Untitled

By: a guest on Jan 17th, 2012  |  syntax: None  |  size: 2.19 KB  |  views: 902  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. bool Cube::Intersect(Ray& ray, float& t)
  2. {
  3.     int tNear = -2147000000;
  4.     int tFar = 2147000000;
  5.     //compute min and max
  6.     //check x
  7.     Min.x = min(Corner1.x, Corner2.x);
  8.     Min.y = min(Corner1.y, Corner2.y);
  9.     Min.z = min(Corner1.z, Corner2.z);
  10.     Max.x = max(Corner1.x, Corner2.x);
  11.     Max.y = max(Corner1.y, Corner2.y);
  12.     Max.z = max(Corner1.z, Corner2.z);
  13.     if((ray.dir.x == 0) && (ray.start.x < Min.x) && (ray.start.x > Max.x))
  14.     {
  15.         //parallel
  16.         return false;
  17.     }
  18.     else
  19.     {
  20.         float t1 = (Min.x - ray.start.x) / ray.dir.x;
  21.         float t2 = (Max.x - ray.start.x) / ray.dir.x;
  22.         if(t1 > t2)
  23.         {
  24.             float temp1 = t1;
  25.             t1 = t2;
  26.             t2 = temp1;
  27.         }
  28.         if(t1 > tNear)
  29.         {
  30.             tNear = t1;
  31.         }
  32.         if(t2 > tFar)
  33.         {
  34.             tFar = t2;
  35.         }
  36.         if((tNear > tFar) || (tFar < 0))
  37.             return false;
  38.     }
  39.  
  40.     //check y
  41.     if((ray.dir.y == 0) && (ray.start.y < Min.y) && (ray.start.y > Max.y))
  42.     {
  43.         //parallel
  44.         return false;
  45.     }
  46.     else
  47.     {
  48.         float t1 = (Min.y - ray.start.y) / ray.dir.y;
  49.         float t2 = (Max.y - ray.start.y) / ray.dir.y;
  50.         if(t1 > t2)
  51.         {
  52.             float temp1 = t1;
  53.             t1 = t2;
  54.             t2 = temp1;
  55.         }
  56.         if(t1 > tNear)
  57.         {
  58.             tNear = t1;
  59.         }
  60.         if(t2 > tFar)
  61.         {
  62.             tFar = t2;
  63.         }
  64.         if((tNear > tFar) || (tFar < 0))
  65.             return false;
  66.     }
  67.  
  68.     //check z
  69.     if((ray.dir.z == 0) && (ray.start.z < Min.z) && (ray.start.z > Max.z))
  70.     {
  71.         //parallel
  72.         return false;
  73.     }
  74.     else
  75.     {
  76.         float t1 = (Min.z - ray.start.z) / ray.dir.z;
  77.         float t2 = (Max.x - ray.start.z) / ray.dir.z;
  78.         if(t1 > t2)
  79.         {
  80.             float temp1 = t1;
  81.             t1 = t2;
  82.             t2 = temp1;
  83.         }
  84.         if(t1 > tNear)
  85.         {
  86.             tNear = t1;
  87.         }
  88.         if(t2 > tFar)
  89.         {
  90.             tFar = t2;
  91.         }
  92.         if((tNear > tFar) || (tFar < 0))
  93.             return false;
  94.     }
  95.     t = tNear;
  96.     return true;
  97. }
clone this paste RAW Paste Data