交叉算法不起作用;其中一个值tmin
,评估为1.#INF000
- 这意味着什么,为什么会发生? tmax
似乎很好。
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
}
答案 0 :(得分:7)
1.#INF000
很可能是正无穷大。如果你得到这个,那么就你的代码而言,这意味着以下之一:
t1
和t2
都是无限的t3
和t4
都是无限的t5
和t6
都是无限的我的猜测是你可能在某个地方除以零,很有可能在你计算dirfrac
的值时。