20 Vec3 center_origin = inRayOrigin - inSphereCenter;
22 float b = 2.0f * inRayDirection.
Dot(center_origin);
23 float c = center_origin.
LengthSq() - inSphereRadius * inSphereRadius;
24 float fraction1, fraction2;
25 if (
FindRoot(a, b, c, fraction1, fraction2) == 0)
26 return c <= 0.0f? 0.0f : FLT_MAX;
29 if (fraction1 > fraction2)
30 std::swap(fraction1, fraction2);
33 if (fraction1 >= 0.0f)
37 if (fraction2 >= 0.0f)
54JPH_INLINE
int RaySphere(
Vec3Arg inRayOrigin,
Vec3Arg inRayDirection,
Vec3Arg inSphereCenter,
float inSphereRadius,
float &outMinFraction,
float &outMaxFraction)
57 Vec3 center_origin = inRayOrigin - inSphereCenter;
59 float b = 2.0f * inRayDirection.
Dot(center_origin);
60 float c = center_origin.
LengthSq() - inSphereRadius * inSphereRadius;
61 float fraction1, fraction2;
62 switch (
FindRoot(a, b, c, fraction1, fraction2))
68 outMinFraction = outMaxFraction = 0.0f;
80 outMinFraction = outMaxFraction = fraction1;
87 if (fraction1 > fraction2)
88 std::swap(fraction1, fraction2);
90 outMinFraction = fraction1;
91 outMaxFraction = fraction2;
JPH_NAMESPACE_BEGIN int FindRoot(const T inA, const T inB, const T inC, T &outX1, T &outX2)
Definition FindRoot.h:13
JPH_NAMESPACE_BEGIN JPH_INLINE float RaySphere(Vec3Arg inRayOrigin, Vec3Arg inRayDirection, Vec3Arg inSphereCenter, float inSphereRadius)
Definition RaySphere.h:17