Advertisement
Guest User

Untitled

a guest
Jan 17th, 2012
3,154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.19 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement