summaryrefslogtreecommitdiffhomepage
path: root/Opcode/OPC_SphereAABBOverlap.h
diff options
context:
space:
mode:
Diffstat (limited to 'Opcode/OPC_SphereAABBOverlap.h')
-rw-r--r--Opcode/OPC_SphereAABBOverlap.h256
1 files changed, 128 insertions, 128 deletions
diff --git a/Opcode/OPC_SphereAABBOverlap.h b/Opcode/OPC_SphereAABBOverlap.h
index a5bd35b..b7b4376 100644
--- a/Opcode/OPC_SphereAABBOverlap.h
+++ b/Opcode/OPC_SphereAABBOverlap.h
@@ -1,128 +1,128 @@
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-/**
- * Sphere-AABB overlap test, based on Jim Arvo's code.
- * \param center [in] box center
- * \param extents [in] box extents
- * \return TRUE on overlap
- */
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-inline_ BOOL SphereCollider::SphereAABBOverlap(const IcePoint& center, const IcePoint& extents)
-{
- // Stats
- mNbVolumeBVTests++;
-
- float d = 0.0f;
-
- //find the square of the distance
- //from the sphere to the box
-#ifdef OLDIES
- for(udword i=0;i<3;i++)
- {
- float tmp = mCenter[i] - center[i];
- float s = tmp + extents[i];
-
- if(s<0.0f) d += s*s;
- else
- {
- s = tmp - extents[i];
- if(s>0.0f) d += s*s;
- }
- }
-#endif
-
-//#ifdef NEW_TEST
-
-// float tmp = mCenter.x - center.x;
-// float s = tmp + extents.x;
-
- float tmp,s;
-
- tmp = mCenter.x - center.x;
- s = tmp + extents.x;
-
- if(s<0.0f)
- {
- d += s*s;
- if(d>mRadius2) return FALSE;
- }
- else
- {
- s = tmp - extents.x;
- if(s>0.0f)
- {
- d += s*s;
- if(d>mRadius2) return FALSE;
- }
- }
-
- tmp = mCenter.y - center.y;
- s = tmp + extents.y;
-
- if(s<0.0f)
- {
- d += s*s;
- if(d>mRadius2) return FALSE;
- }
- else
- {
- s = tmp - extents.y;
- if(s>0.0f)
- {
- d += s*s;
- if(d>mRadius2) return FALSE;
- }
- }
-
- tmp = mCenter.z - center.z;
- s = tmp + extents.z;
-
- if(s<0.0f)
- {
- d += s*s;
- if(d>mRadius2) return FALSE;
- }
- else
- {
- s = tmp - extents.z;
- if(s>0.0f)
- {
- d += s*s;
- if(d>mRadius2) return FALSE;
- }
- }
-//#endif
-
-#ifdef OLDIES
-// IcePoint Min = center - extents;
-// IcePoint Max = center + extents;
-
- float d = 0.0f;
-
- //find the square of the distance
- //from the sphere to the box
- for(udword i=0;i<3;i++)
- {
-float Min = center[i] - extents[i];
-
-// if(mCenter[i]<Min[i])
- if(mCenter[i]<Min)
- {
-// float s = mCenter[i] - Min[i];
- float s = mCenter[i] - Min;
- d += s*s;
- }
- else
- {
-float Max = center[i] + extents[i];
-
-// if(mCenter[i]>Max[i])
- if(mCenter[i]>Max)
- {
- float s = mCenter[i] - Max;
- d += s*s;
- }
- }
- }
-#endif
- return d <= mRadius2;
-}
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+/**
+ * Sphere-AABB overlap test, based on Jim Arvo's code.
+ * \param center [in] box center
+ * \param extents [in] box extents
+ * \return TRUE on overlap
+ */
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+inline_ BOOL SphereCollider::SphereAABBOverlap(const IcePoint& center, const IcePoint& extents)
+{
+ // Stats
+ mNbVolumeBVTests++;
+
+ float d = 0.0f;
+
+ //find the square of the distance
+ //from the sphere to the box
+#ifdef OLDIES
+ for(udword i=0;i<3;i++)
+ {
+ float tmp = mCenter[i] - center[i];
+ float s = tmp + extents[i];
+
+ if(s<0.0f) d += s*s;
+ else
+ {
+ s = tmp - extents[i];
+ if(s>0.0f) d += s*s;
+ }
+ }
+#endif
+
+//#ifdef NEW_TEST
+
+// float tmp = mCenter.x - center.x;
+// float s = tmp + extents.x;
+
+ float tmp,s;
+
+ tmp = mCenter.x - center.x;
+ s = tmp + extents.x;
+
+ if(s<0.0f)
+ {
+ d += s*s;
+ if(d>mRadius2) return FALSE;
+ }
+ else
+ {
+ s = tmp - extents.x;
+ if(s>0.0f)
+ {
+ d += s*s;
+ if(d>mRadius2) return FALSE;
+ }
+ }
+
+ tmp = mCenter.y - center.y;
+ s = tmp + extents.y;
+
+ if(s<0.0f)
+ {
+ d += s*s;
+ if(d>mRadius2) return FALSE;
+ }
+ else
+ {
+ s = tmp - extents.y;
+ if(s>0.0f)
+ {
+ d += s*s;
+ if(d>mRadius2) return FALSE;
+ }
+ }
+
+ tmp = mCenter.z - center.z;
+ s = tmp + extents.z;
+
+ if(s<0.0f)
+ {
+ d += s*s;
+ if(d>mRadius2) return FALSE;
+ }
+ else
+ {
+ s = tmp - extents.z;
+ if(s>0.0f)
+ {
+ d += s*s;
+ if(d>mRadius2) return FALSE;
+ }
+ }
+//#endif
+
+#ifdef OLDIES
+// IcePoint Min = center - extents;
+// IcePoint Max = center + extents;
+
+ float d = 0.0f;
+
+ //find the square of the distance
+ //from the sphere to the box
+ for(udword i=0;i<3;i++)
+ {
+float Min = center[i] - extents[i];
+
+// if(mCenter[i]<Min[i])
+ if(mCenter[i]<Min)
+ {
+// float s = mCenter[i] - Min[i];
+ float s = mCenter[i] - Min;
+ d += s*s;
+ }
+ else
+ {
+float Max = center[i] + extents[i];
+
+// if(mCenter[i]>Max[i])
+ if(mCenter[i]>Max)
+ {
+ float s = mCenter[i] - Max;
+ d += s*s;
+ }
+ }
+ }
+#endif
+ return d <= mRadius2;
+}