WuhuIslandTesting/Library/PackageCache/com.unity.splines@1.0.1/Runtime/Interpolators.cs

254 lines
10 KiB
C#
Raw Permalink Normal View History

2025-01-07 02:06:59 +01:00
using Unity.Mathematics;
namespace UnityEngine.Splines.Interpolators
{
/// <summary>
/// Linearly interpolate between two values a and b by ratio t.
/// </summary>
public struct LerpFloat : IInterpolator<float>
{
/// <summary>
/// Linearly interpolates between a and b by t.
/// </summary>
/// <param name="a">Start value, returned when t = 0.</param>
/// <param name="b">End value, returned when t = 1.</param>
/// <param name="t">Interpolation ratio.</param>
/// <returns> The interpolated result between the two values.</returns>
public float Interpolate(float a, float b, float t)
{
return math.lerp(a, b, t);
}
}
/// <summary>
/// Linearly interpolate between two values a and b by ratio t.
/// </summary>
public struct LerpFloat2 : IInterpolator<float2>
{
/// <summary>
/// Linearly interpolates between a and b by t.
/// </summary>
/// <param name="a">Start value, returned when t = 0.</param>
/// <param name="b">End value, returned when t = 1.</param>
/// <param name="t">Interpolation ratio.</param>
/// <returns> The interpolated result between the two values.</returns>
public float2 Interpolate(float2 a, float2 b, float t)
{
return math.lerp(a, b, t);
}
}
/// <summary>
/// Linearly interpolate between two values a and b by ratio t.
/// </summary>
public struct LerpFloat3 : IInterpolator<float3>
{
/// <summary>
/// Linearly interpolates between a and b by t.
/// </summary>
/// <param name="a">Start value, returned when t = 0.</param>
/// <param name="b">End value, returned when t = 1.</param>
/// <param name="t">Interpolation ratio.</param>
/// <returns> The interpolated result between the two values.</returns>
public float3 Interpolate(float3 a, float3 b, float t)
{
return math.lerp(a, b, t);
}
}
/// <summary>
/// Linearly interpolate between two values a and b by ratio t.
/// </summary>
public struct LerpFloat4 : IInterpolator<float4>
{
/// <summary>
/// Linearly interpolates between a and b by t.
/// </summary>
/// <param name="a">Start value, returned when t = 0.</param>
/// <param name="b">End value, returned when t = 1.</param>
/// <param name="t">Interpolation ratio.</param>
/// <returns> The interpolated result between the two values.</returns>
public float4 Interpolate(float4 a, float4 b, float t)
{
return math.lerp(a, b, t);
}
}
/// <summary>
/// Spherically interpolate between two values a and b by ratio t.
/// </summary>
public struct SlerpFloat2 : IInterpolator<float2>
{
/// <summary>
/// Spherically interpolates between a and b by t.
/// </summary>
/// <param name="a">Start value, returned when t = 0.</param>
/// <param name="b">End value, returned when t = 1.</param>
/// <param name="t">Interpolation ratio.</param>
/// <returns> The spherically interpolated result between the two values.</returns>
public float2 Interpolate(float2 a, float2 b, float t)
{
// Using Vector3 API as Mathematics does not provide Slerp for float2.
var result = Vector3.Slerp(new Vector3(a.x, a.y, 0f), new Vector3(b.x, b.y, 0f), t);
return new float2(result.x, result.y);
}
}
/// <summary>
/// Spherically interpolate between two values a and b by ratio t.
/// </summary>
public struct SlerpFloat3 : IInterpolator<float3>
{
/// <summary>
/// Spherically interpolates between a and b by t.
/// </summary>
/// <param name="a">Start value, returned when t = 0.</param>
/// <param name="b">End value, returned when t = 1.</param>
/// <param name="t">Interpolation ratio.</param>
/// <returns> The spherically interpolated result between the two values.</returns>
public float3 Interpolate(float3 a, float3 b, float t)
{
// Using Vector3 API as Mathematics does not provide Slerp for float3.
return Vector3.Slerp(a, b, t);
}
}
/// <summary>
/// Linearly interpolate between two values a and b by ratio t.
/// </summary>
public struct LerpQuaternion : IInterpolator<quaternion>
{
/// <summary>
/// Linearly interpolates between a and b by t.
/// </summary>
/// <param name="a">Start value, returned when t = 0.</param>
/// <param name="b">End value, returned when t = 1.</param>
/// <param name="t">Interpolation ratio.</param>
/// <returns> The interpolated result between the two values.</returns>
public quaternion Interpolate(quaternion a, quaternion b, float t)
{
return math.nlerp(a, b, t);
}
}
/// <summary>
/// Linearly interpolate between two values a and b by ratio t.
/// </summary>
public struct LerpColor : IInterpolator<Color>
{
/// <summary>
/// Linearly interpolates between a and b by t.
/// </summary>
/// <param name="a">Start value, returned when t = 0.</param>
/// <param name="b">End value, returned when t = 1.</param>
/// <param name="t">Interpolation ratio.</param>
/// <returns> The interpolated result between the two values.</returns>
public Color Interpolate(Color a, Color b, float t)
{
return Color.Lerp(a, b, t);
}
}
/// <summary>
/// Interpolate between two values a and b by ratio t with smoothing at the start and end.
/// </summary>
public struct SmoothStepFloat : IInterpolator<float>
{
/// <summary>
/// Interpolates between a and b by ratio t with smoothing at the limits.
/// This function interpolates between min and max in a similar way to Lerp. However, the interpolation will
/// gradually speed up from the start and slow down toward the end. This is useful for creating natural-looking
/// animation, fading and other transitions.
/// </summary>
/// <param name="a">Start value, returned when t = 0.</param>
/// <param name="b">End value, returned when t = 1.</param>
/// <param name="t">Interpolation ratio.</param>
/// <returns> The interpolated result between the two values.</returns>
public float Interpolate(float a, float b, float t)
{
return math.smoothstep(a, b, t);
}
}
/// <summary>
/// Interpolate between two values a and b by ratio t with smoothing at the start and end.
/// </summary>
public struct SmoothStepFloat2 : IInterpolator<float2>
{
/// <summary>
/// Interpolates between a and b by ratio t with smoothing at the limits.
/// This function interpolates between min and max in a similar way to Lerp. However, the interpolation will
/// gradually speed up from the start and slow down toward the end. This is useful for creating natural-looking
/// animation, fading and other transitions.
/// </summary>
/// <param name="a">Start value, returned when t = 0.</param>
/// <param name="b">End value, returned when t = 1.</param>
/// <param name="t">Interpolation ratio.</param>
/// <returns> The interpolated result between the two values.</returns>
public float2 Interpolate(float2 a, float2 b, float t)
{
return math.smoothstep(a, b, t);
}
}
/// <summary>
/// Interpolate between two values a and b by ratio t with smoothing at the start and end.
/// </summary>
public struct SmoothStepFloat3 : IInterpolator<float3>
{
/// <summary>
/// Interpolates between a and b by ratio t with smoothing at the limits.
/// This function interpolates between min and max in a similar way to Lerp. However, the interpolation will
/// gradually speed up from the start and slow down toward the end. This is useful for creating natural-looking
/// animation, fading and other transitions.
/// </summary>
/// <param name="a">Start value, returned when t = 0.</param>
/// <param name="b">End value, returned when t = 1.</param>
/// <param name="t">Interpolation ratio.</param>
/// <returns> The interpolated result between the two values.</returns>
public float3 Interpolate(float3 a, float3 b, float t)
{
return math.smoothstep(a, b, t);
}
}
/// <summary>
/// Interpolate between two values a and b by ratio t with smoothing at the start and end.
/// </summary>
public struct SmoothStepFloat4 : IInterpolator<float4>
{
/// <summary>
/// Interpolates between a and b by ratio t with smoothing at the limits.
/// This function interpolates between min and max in a similar way to Lerp. However, the interpolation will
/// gradually speed up from the start and slow down toward the end. This is useful for creating natural-looking
/// animation, fading and other transitions.
/// </summary>
/// <param name="a">Start value, returned when t = 0.</param>
/// <param name="b">End value, returned when t = 1.</param>
/// <param name="t">Interpolation ratio.</param>
/// <returns> The interpolated result between the two values.</returns>
public float4 Interpolate(float4 a, float4 b, float t)
{
return math.smoothstep(a, b, t);
}
}
/// <summary>
/// Spherically interpolates between quaternions a and b by ratio t. The parameter t is clamped b the range [0, 1].
/// </summary>
public struct SlerpQuaternion : IInterpolator<quaternion>
{
/// <summary>
/// Spherically interpolates between quaternions a and b by ratio t. The parameter t is clamped b the range [0, 1].
/// </summary>
/// <param name="a">Start value, returned when t = 0.</param>
/// <param name="b">End value, returned when t = 1.</param>
/// <param name="t">Interpolation ratio.</param>
/// <returns>A quaternion spherically interpolated between quaternions a and b.</returns>
public quaternion Interpolate(quaternion a, quaternion b, float t)
{
return math.slerp(a, b, t);
}
}
}