- 개요

각 기저 축의 회전행렬을 구했다면, 이를 순서대로 적용하여 최종 회전행렬을 생성해야 한다
이때 각각의 조합의 경우의 수는 위와 같다
프로젝트에서는 언리얼 엔진과 동일한 5번 경우의 수를 사용하여 회전축의 순서를 설정한다
- 프로젝트의 오일러 각의 회전 행렬에서 로컬 축을 계산

5번 경우의 수를 사용하여 회전축의 적용 순서를 결정하면
각 회전행렬을 순서대로 곱하여 오일러 각에 대응되는 회전행렬 R을 생성할 수 있다

회전행렬 R의 열벡터는 표준기저벡터가 회전 변환된 로컬 축을 의미한다
이때 최종 회전 행렬 R에서 yaw + pitch + roll을 각각 α + β + γ로 치환하면 로컬 축을 각각 위와 같이 표현할 수 있다

프로젝트에서는 GetLocalAxes 함수를 사용하여 오일러 각의 회전 행렬에서 로컬축의 값을 생성한다
- 오일러 각의 sin 함수와 cos 함수의 값을 계산
- 오일러 각으로 회전된 3차원 공간의 로컬 축을 계산해 반환
- 프로젝트의 로컬 축을 이용한 3차원 회전 행렬의 구현

3차원 공간의 Transform도 회전 변환이 발생할 때마다 로컬 축을 갱신하면
게임 로직에서 유용하게 사용할 뿐만 아니라 렌더링 로직에 사용하는 회전행렬도 바로 생성할 수 있다
따라서 계산식에서 얻은 로컬 축 벡터를 각각 x, y, z로 지정하고
이들을 열벡터로 사용하여 얻어지는 3차원 공간의 회전행렬 R은 위와 같다

프로젝트에서는 TransformComponent 클래스를 사용하여
3차원 공간에서 회전이 발생할 때마다 변경된 오일러 각으로부터 로컬 축 정보를 갱신하도록 구성하였다
- AddYawRotation 함수 + AddRollRotation 함수 + AddPitchRotation 함수 + SetRotation 함수
- 위 4개의 함수들은 오일러 각으로 관리하는 3차원 Transform의 회전 값을 변경
- 회전 값이 변경되면 Update 함수를 호출하여 로컬 축을 갱신 + 각도 값을 일정 범위로 유지
- GetLocalX 함수 + GetLocalY 함수 + GetLocalZ 함수 : Transform이 관리하는 로컬 축 값을 반환
- SetLocalAxes 함수 : 로컬 축 값을 직접 설정
- Update 함수 : 회전이 발생하면 로컬 축 값을 갱신 + 각의 범위 값을 지정
- _Rotation 멤버변수 : Transform에서 회전을 관리하는 용도로 사용 + 오일러 각 방식의 Rotator 구조체
- _Right 멤버변수 + _Up 멤버변수 + _Forward 멤버변수 : 로컬 축의 값 + 기본값으로 표준기저벡터 사용
'수학 > 이득우의 게임 수학' 카테고리의 다른 글
| 카메라 공간 (0) | 2026.03.11 |
|---|---|
| 3차원 모델행렬 (0) | 2026.02.25 |
| 오일러 각 (0) | 2026.02.11 |
| 3차원 공간의 트랜스폼 (0) | 2026.02.11 |
| 3차원 공간의 설계 (0) | 2026.02.04 |