본문 바로가기

프로그래밍

언리얼 엔진 5 (UE5) FRotator → FQuat 변환 방법

728x90
728x90

언리얼 엔진 5(UE5)에서 FRotator를 **FQuat(Quaternion, 사원수)**로 변환하는 방법을 소개해드립니다.


1. FRotator를 FQuat로 변환하기 (C++ 코드)

아래 코드에서는 FRotator를 FQuat로 변환하는 방법을 보여줍니다.

FRotator Rotation(0.0f, 90.0f, 0.0f); // 예제 회전 값 (Pitch, Yaw, Roll)
FQuat QuatRotation = Rotation.Quaternion(); // FQuat 변환

// 변환된 FQuat 값 출력 (디버깅 용도)
UE_LOG(LogTemp, Log, TEXT("Quat: X=%f, Y=%f, Z=%f, W=%f"), QuatRotation.X, QuatRotation.Y, QuatRotation.Z, QuatRotation.W);

📌 코드 설명

  • FRotator::Quaternion() 함수를 사용하면 쉽게 FQuat로 변환할 수 있습니다.
  • UE_LOG를 활용해 변환된 값을 출력할 수 있습니다.

2. FQuat을 FRotator로 변환하기 (C++ 코드)

반대로 FQuat을 다시 FRotator로 변환할 수도 있습니다.

FQuat MyQuat = FQuat(FVector(0, 0, 1), FMath::DegreesToRadians(45.0f)); // Z축을 기준으로 45도 회전
FRotator MyRotator = MyQuat.Rotator(); // FRotator 변환

UE_LOG(LogTemp, Log, TEXT("Quaternion: %s"), *MyQuat.ToString());
UE_LOG(LogTemp, Log, TEXT("Rotator: %s"), *MyRotator.ToString());

📌 코드 설명

  • FQuat::Rotator()를 사용하면 FQuat을 다시 FRotator로 변환할 수 있습니다.
  • FMath::DegreesToRadians()를 사용해 각도를 **라디안(Radian)**으로 변환 후 사용합니다.
  • ToString()을 활용하면 변환된 값을 쉽게 확인할 수 있습니다.

3. 언제 FQuat을 사용할까?

FRotator는 (Pitch, Yaw, Roll) 값을 사용하여 회전을 정의하는 방식이지만, Gimbal Lock(짐벌락) 문제가 발생할 수 있습니다.
반면, FQuat은 사원수를 사용하여 더 부드럽고 안정적인 회전 연산을 수행할 수 있습니다.

✅ 따라서, 연속적인 회전이나 보간(Interpolation)이 필요한 경우에는 FQuat을 사용하는 것이 좋습니다.



언리얼 엔진에서 회전을 다룰 때, FQuat을 적절히 활용하면 보다 부드럽고 안정적인 동작을 구현할 수 있습니다.

728x90
반응형