Reputation: 10314
An intersection algorithm isn't working; one of the values, tmin
, evaluates to 1.#INF000
- what does this mean and why is it occurring? tmax
seems to be fine.
float Ray::Intersects(BoundingBox boundingBox)
{
// direction is unit direction vector of the ray
D3DXVECTOR3 dirfrac(
1.0f / direction.x,
1.0f / direction.y,
1.0f / direction.z);
D3DXVECTOR3 min = boundingBox.Min();
D3DXVECTOR3 max = boundingBox.Max();
//min and max are the negative and positive corners of the bounding box
float t1 = (min.x - origin.x) * dirfrac.x;
float t2 = (max.x - origin.x) * dirfrac.x;
float t3 = (min.y - origin.y) * dirfrac.y;
float t4 = (max.y - origin.y) * dirfrac.y;
float t5 = (min.z - origin.z) * dirfrac.z;
float t6 = (max.z - origin.z) * dirfrac.z;
float tmin = max(max(min(t1, t2), min(t3, t4)), min(t5, t6));
float tmax = min(min(max(t1, t2), max(t3, t4)), max(t5, t6));
// if tmax < 0, ray (line) is intersecting AABB, but whole AABB is behind us
if (tmax < 0) { return -1; }
// if tmin > tmax, ray doesn't intersect AABB
if (tmin > tmax) { return -1; } //HERE TMIN IS 1.#INFOOO
return tmin; //THIS IS NEVER REACHED
}
Upvotes: 3
Views: 5058
Reputation: 48071
1.#INF000
is most likely the positive infinity. If you are getting this, it means one of the following in case of your code:
t1
and t2
are both infinitet3
and t4
are both infinitet5
and t6
are both infiniteMy guess is that you are probably dividing by zero somewhere, most likely when you calculate the value of dirfrac
.
Upvotes: 8