수학/이득우의 게임 수학

3차원 회전행렬의 유도

monstro 2026. 2. 25. 11:59
728x90
반응형

- 개요

오일러 각의 조합에 대한 경우의 수

 

각 기저 축의 회전행렬을 구했다면, 이를 순서대로 적용하여 최종 회전행렬을 생성해야 한다

이때 각각의 조합의 경우의 수는 위와 같다

프로젝트에서는 언리얼 엔진과 동일한 5번 경우의 수를 사용하여 회전축의 순서를 설정한다

 

- 프로젝트의 오일러 각의 회전 행렬에서 로컬 축을 계산

프로젝트의 최종 회전 행렬

 

5번 경우의 수를 사용하여 회전축의 적용 순서를 결정하면 

각 회전행렬을 순서대로 곱하여 오일러 각에 대응되는 회전행렬 R을 생성할 수 있다

 

최종 회전 행렬에서 얻어낸 로컬 축의 값(가운데 점 기호는 곱셈을 의미)

 

회전행렬 R의 열벡터는 표준기저벡터가 회전 변환된 로컬 축을 의미한다

이때 최종 회전 행렬 R에서 yaw + pitch + roll을 각각 α + β + γ로 치환하면 로컬 축을 각각 위와 같이 표현할 수 있다

 

 

프로젝트에서는 GetLocalAxes 함수를 사용하여 오일러 각의 회전 행렬에서 로컬축의 값을 생성한다

  • 오일러 각의 sin 함수cos 함수의 값을 계산
  • 오일러 각으로 회전된 3차원 공간의 로컬 축을 계산해 반환

 

- 프로젝트의 로컬 축을 이용한 3차원 회전 행렬의 구현

로컬 축 벡터를 열벡터로 사용하는 3차원 공간의 회전행렬 R

 

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 멤버변수 : 로컬 축의 값 + 기본값으로 표준기저벡터 사용
728x90
반응형

'수학 > 이득우의 게임 수학' 카테고리의 다른 글

카메라 공간  (0) 2026.03.11
3차원 모델행렬  (0) 2026.02.25
오일러 각  (0) 2026.02.11
3차원 공간의 트랜스폼  (0) 2026.02.11
3차원 공간의 설계  (0) 2026.02.04