Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool Cube::Intersect(Ray& ray, float& t)
- {
- int tNear = -2147000000;
- int tFar = 2147000000;
- //compute min and max
- //check x
- Min.x = min(Corner1.x, Corner2.x);
- Min.y = min(Corner1.y, Corner2.y);
- Min.z = min(Corner1.z, Corner2.z);
- Max.x = max(Corner1.x, Corner2.x);
- Max.y = max(Corner1.y, Corner2.y);
- Max.z = max(Corner1.z, Corner2.z);
- if((ray.dir.x == 0) && (ray.start.x < Min.x) && (ray.start.x > Max.x))
- {
- //parallel
- return false;
- }
- else
- {
- float t1 = (Min.x - ray.start.x) / ray.dir.x;
- float t2 = (Max.x - ray.start.x) / ray.dir.x;
- if(t1 > t2)
- {
- float temp1 = t1;
- t1 = t2;
- t2 = temp1;
- }
- if(t1 > tNear)
- {
- tNear = t1;
- }
- if(t2 > tFar)
- {
- tFar = t2;
- }
- if((tNear > tFar) || (tFar < 0))
- return false;
- }
- //check y
- if((ray.dir.y == 0) && (ray.start.y < Min.y) && (ray.start.y > Max.y))
- {
- //parallel
- return false;
- }
- else
- {
- float t1 = (Min.y - ray.start.y) / ray.dir.y;
- float t2 = (Max.y - ray.start.y) / ray.dir.y;
- if(t1 > t2)
- {
- float temp1 = t1;
- t1 = t2;
- t2 = temp1;
- }
- if(t1 > tNear)
- {
- tNear = t1;
- }
- if(t2 > tFar)
- {
- tFar = t2;
- }
- if((tNear > tFar) || (tFar < 0))
- return false;
- }
- //check z
- if((ray.dir.z == 0) && (ray.start.z < Min.z) && (ray.start.z > Max.z))
- {
- //parallel
- return false;
- }
- else
- {
- float t1 = (Min.z - ray.start.z) / ray.dir.z;
- float t2 = (Max.x - ray.start.z) / ray.dir.z;
- if(t1 > t2)
- {
- float temp1 = t1;
- t1 = t2;
- t2 = temp1;
- }
- if(t1 > tNear)
- {
- tNear = t1;
- }
- if(t2 > tFar)
- {
- tFar = t2;
- }
- if((tNear > tFar) || (tFar < 0))
- return false;
- }
- t = tNear;
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement