쿼터니언과 오일러 각도를 정리해보았습니다.
구글링 및 ChatGPT의 도움을 받아 작성했습니다.
1. 오일러 각 (Euler Angle)
1.1 정의
오일러 각은 물체의 회전을 세 개의 축 회전 값으로 표현하는 방식이다.
- Pitch (X축 회전)
- Yaw (Y축 회전)
- Roll (Z축 회전)
보통 (Pitch, Yaw, Roll) 또는 (X, Y, Z) 형태로 저장된다.
1.2 장점
- 사람이 이해하기 쉽다
- 디버깅이 직관적이다
- UI 입력(슬라이더, 각도 입력)에 적합하다
👉 그래서 에디터 상의 회전 값은 대부분 오일러 각이다.
1.3 치명적인 문제: 짐벌 락 (Gimbal Lock)
짐벌 락이란?
세 축 중 두 축이 겹쳐져 자유도가 하나 사라지는 현상이다.
예를 들어:
- Pitch가 ±90°에 가까워질 경우
- Yaw와 Roll 축이 같은 축처럼 동작
👉 결과적으로 의도하지 않은 회전이 발생한다.
2. 쿼터니언 (Quaternion)
2.1 정의
쿼터니언은 회전을 축(axis) + 각도(angle) 개념으로 표현하는 4차원 벡터다.
형태:
(x, y, z, w)
- (x, y, z): 회전 축 정보
- w: 회전 각도 정보 (cos(θ/2))
2.2 왜 4차원인가?
- 3차원 회전을 중복 없이 표현하기 위함
- 회전을 하나의 연산 단위로 다루기 위함
👉 중요한 점은:
“4차원 공간에서 회전한다”가 아니라 “3차원 회전을 4개의 값으로 표현한다”는 것이다.
2.3 쿼터니언의 장점
1) 짐벌 락이 발생하지 않는다
- 축을 순차적으로 회전하지 않음
- 회전을 하나의 상태로 표현
2) 회전 보간이 부드럽다
- Slerp (Spherical Linear Interpolation)
- 일정한 각속도 유지
3) 수치적으로 안정적이다
- 누적 회전 오류가 적음
- 정규화로 오차 관리 가능
5. 한 문장으로 정리
오일러 각은 직관적이지만 짐벌 락 문제가 있고, 쿼터니언은 이를 해결하여 안정적인 회전과 보간을 가능하게 합니다. 그래서 게임 엔진에서는 입력은 오일러, 내부 연산은 쿼터니언을 사용합니다.
'GameDevelop > Notes' 카테고리의 다른 글
| 해시테이블과 해시충돌 (0) | 2026.01.09 |
|---|---|
| A* 알고리즘 (0) | 2026.01.05 |
| l-value와 r-value (0) | 2026.01.01 |
| 벡터의 내적과 외적 (0) | 2026.01.01 |
| RAII - Resource acquisition is initialization (0) | 2024.09.10 |