수학/이득우의 게임 수학 - 실습 예제

3차원 공간에서의 자유로운 회전

monstro 2026. 5. 6. 23:25
728x90
반응형

- 개요

로드리게스 회전 공식

 

위와 같이 구성된 로드리게스 회전 공식을 이용하여 3차원 공간에서 오브젝트를 회전시킨다

 

- 예제

 

우선, 위와 같이 로드리게스 회전과 관련된 3개의 전역변수를 선언한다

각각 다음과 같다

  • n 전역변수 : 회전축벡터
  • right, forward 전역변수 : 회전축에 직교하는 2개의 벡터
  • thetaDegree 전역변수 : 회전축에 대한 회전량 + 각도법을 사용하여 값을 설정

 

 

게임의 로직을 담당하는 Update3D 함수를 위와 같이 구성한다

사용자의 키 입력을 받아 오일러 각의 Yaw / Pitch / Roll 회전을 진행한다

오브젝트의 회전된 로컬 축을 전역변수에 각각 저장하고 Y축을 회전축으로 설정한다

W 키 입력을 받으면 회전량을 변경한다

 

 

렌더링을 처리하는 Render3D 함수의 로직을 위와 같이 구성하였다

예제의 오브젝트는 이동하지 못하고 원점에 고정되어 있도록 설정하였다

따라서 최종 행렬에서 회전 행렬만 설정하였다

메시를 그리는 DrawMesh3D 함수에 메시의 크기 정보도 넘겨주어 최종 정점을 계산한다

 

 

메시를 그리는 DrawMesh3D 함수를 위와 같이 구성하였다

주의깊게 보아야 하는 로직은 위의 정점 변환 로직이다

회전량(θ)에 대한 sin 함수와 cos 함수의 값을 계산하고 원점에서 정점으로 향하는 u 벡터를 계산한다

이후 u 벡터와 n 벡터를 내적하고 외적하여 필요한 값을 저장한 뒤에

로드리게스 공식에 넘겨주어 정점의 최종 변환 위치를 계산한다

 

- 최종 실행 결과

 

최종 실행 결과는 위와 같다

회전축붉은색, 회전축에 직교하는 회전 평면의 축회색으로 표시하였다

 

- 한계점

로그리게스 회전 공식을 사용하면 오일러 각으로 구현하기 힘든 임의의 축에 대해서도 회전 변환이 가능하다

하지만 이 방식은 회전 행렬로의 변환어려워 렌더링 파이프 라인과 연동하기 까다롭다

따라서 게임 엔진로드리게스 회전과 동일한 기능을 제공하면서 행렬 변환이 용이사원수를 사용한다

728x90
반응형