diff --git a/Source/Engine/Core/Math/BoundingSphere.cpp b/Source/Engine/Core/Math/BoundingSphere.cpp index 5b95ca0cc..0ab206a61 100644 --- a/Source/Engine/Core/Math/BoundingSphere.cpp +++ b/Source/Engine/Core/Math/BoundingSphere.cpp @@ -136,7 +136,11 @@ void BoundingSphere::FromPoints(const Double3* points, int32 pointsCount, Boundi void BoundingSphere::FromBox(const BoundingBox& box, BoundingSphere& result) { - ASSERT(!box.Minimum.IsNanOrInfinity() && !box.Maximum.IsNanOrInfinity()); + if (box.Minimum.IsNanOrInfinity() || box.Maximum.IsNanOrInfinity()) + { + result = Empty; + return; + } const Real x = box.Maximum.X - box.Minimum.X; const Real y = box.Maximum.Y - box.Minimum.Y; const Real z = box.Maximum.Z - box.Minimum.Z; diff --git a/Source/Engine/Physics/Actors/RigidBody.cpp b/Source/Engine/Physics/Actors/RigidBody.cpp index 04672552c..ec492d6c8 100644 --- a/Source/Engine/Physics/Actors/RigidBody.cpp +++ b/Source/Engine/Physics/Actors/RigidBody.cpp @@ -447,9 +447,13 @@ void RigidBody::OnActiveTransformChanged() // Change actor transform (but with locking) ASSERT(!_isUpdatingTransform); _isUpdatingTransform = true; - Transform transform; + Transform transform = _transform; PhysicsBackend::GetRigidActorPose(_actor, transform.Translation, transform.Orientation); - transform.Scale = _transform.Scale; + if (transform.Translation.IsNanOrInfinity() || transform.Orientation.IsNanOrInfinity()) + { + LOG(Error, "GetRigidActorPose retuned NaN/Inf transformation"); + transform = _transform; + } if (_parent) { _parent->GetTransform().WorldToLocal(transform, _localTransform);