Fix Vector3 Slerp Normalizing Zero Vectors

Ported the existing zero length check in C++ into C#.
This commit is contained in:
Z0rb14n 2024-07-25 18:40:29 -07:00
parent e343dbbcc1
commit 0d6e9de0b9
No known key found for this signature in database
GPG Key ID: 4B4E13301F3E0861
1 changed files with 9 additions and 1 deletions

View File

@ -692,10 +692,18 @@ namespace Godot
// Zero length vectors have no angle, so the best we can do is either lerp or throw an error.
return Lerp(to, weight);
}
Vector3 axis = Cross(to);
real_t axisLengthSquared = axis.LengthSquared();
if (axisLengthSquared == 0.0)
{
// Colinear vectors have no rotation axis or angle between them, so the best we can do is lerp.
return Lerp(to, weight);
}
axis /= Mathf.Sqrt(axisLengthSquared);
real_t startLength = Mathf.Sqrt(startLengthSquared);
real_t resultLength = Mathf.Lerp(startLength, Mathf.Sqrt(endLengthSquared), weight);
real_t angle = AngleTo(to);
return Rotated(Cross(to).Normalized(), angle * weight) * (resultLength / startLength);
return Rotated(axis, angle * weight) * (resultLength / startLength);
}
/// <summary>