Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Obliczanie rotacji Pitch i Roll dzięki osi Yaw

Ostatnio zmodyfikowano 2015-04-23 16:01
Autor Wiadomość
RazzorFlame
Temat założony przez niniejszego użytkownika
Obliczanie rotacji Pitch i Roll dzięki osi Yaw
» 2015-04-23 15:55:31
Witam, może od razu zacznę od podania celu. Chcę zrobić żeby roślinki w Unreal Engine 4 zostały "odpychane" od postaci (rotacją), gdy ta jest zbyt blisko.
Mam rotację Yaw (odpowiada ona kątowi między postacią a roślinką) i chciałbym z tego wyliczyć kąt Pitch i Roll. Jako że funkcja FVector::Rotation() nie liczy kąta Roll (oto źródło):
C/C++
CORE_API FRotator FVector::Rotation() const
{
    FRotator R;
   
    // Find yaw.
    R.Yaw = FMath::Atan2( Y, X ) * 180.f / PI;
   
    // Find pitch.
    R.Pitch = FMath::Atan2( Z, FMath::Sqrt( X * X + Y * Y ) ) * 180.f / PI;
   
    // Find roll.
    R.Roll = 0;
   
    return R;
}

Do tej pory obliczałem to tak:
C/C++
FVector pawnLoc = nearestPawn->GetActorLocation() * FVector( 1.f, 1.f, 0.f ); //nie biore pod uwage wysokosci Pawna
FVector currLoc = GetActorLocation() * FVector( 1.f, 1.f, 0.f ); //Ani wysokosci roslinki
FRotator rotator =( pawnLoc - currLoc ).Rotation(); //Obliczenie rotacji
//rotator.Yaw
I żeby "wygiąć" roślinę po prostu obracałem ją napierw w Yaw a potem w Pitch (to w pewien sposób zastępowało Roll ale cała roślinka obracała się).
Chciałbym osiągnąć taki efekt:

Do tej pory, żeby obliczyć Pitch potrzebowałem różnicy wysokości punktów, w sumie się nie dziwie. Jak obliczyć Pitch i Roll z samego Yaw? Może być chociaż znormalizowane to, bylebym mógł to przemnożyć, żeby razem ze zbliżaniem się postaci krzak odchylał się coraz bardziej.
P-131327
RazzorFlame
Temat założony przez niniejszego użytkownika
» 2015-04-23 16:01:43
Chyba znalazłem rozwiązanie. W UE4 jest wbudowana funkcja Slerp (spherical interpolation), czy coś takiego nadawałoby się do tego?
P-131329
« 1 »
  Strona 1 z 1