Эквивалент Unity 'Vector3.Slerp' в Unreal Engine 4 C ++? - PullRequest
2 голосов
/ 23 февраля 2020

Имеет ли UE4 C ++ встроенную функцию, аналогичную Vector3.Slerp?

Если нет, то не существует «нереально оптимизированного способа» сделать это?
У меня есть 2 вектора, которые я хочу получить между ними в нескольких точках на круглом пути c.

1 Ответ

2 голосов
/ 25 февраля 2020

Я бы реализовал векторное уравнение Slerp ( см. Страницу википедии ) примерно так:

static FVector Slerp(const FVector& a, const FVector& b, const float t)
{
    float omega = FGenericPlatformMath::Acos(FVector::DotProduct(
            a.GetSafeNormal(), 
            b.GetSafeNormal()
            ));
    float sinOmega = FGenericPlatformMath::Sin(omega);
    FVector termOne = a * (FGenericPlatformMath::Sin(omega * (1.0 - t)) / sinOmega);
    FVector termTwo = b * (FGenericPlatformMath::Sin(omega * (      t)) / sinOmega);
    return termOne + termTwo;
}
...