- 개요
물체를 표현하기 위해 만들어진 메시 데이터는 자신만의 공간에서 물체를 구성하는 각 정점의 위치 정보를 저장한다
이헐게 물체의 정보를 저장하기 위해 부여한 공간을 로컬 공간이라고 표현한다
그런데 게임 콘텐츠는 다양한 종류의 물체가 모여 배경을 이루므로 여러 물체를 담을 별도의 공간이 필요하다
여러 물체를 모아 게임 콘텐츠를 만드는데 사용하는 새로운 공간을 월드 공간이라고 표현한다

따라서 게임 콘텐츠에서는 게임 오브젝트마다 월드 공간과 로컬 공간이라는 2개의 공간 개념이 존재한다
그러므로 주어진 2개의 공간 정보를 적절하게 활용해야 한다
위와 같은 상황에서 기본적으로 월드 공간을 중심으로 설정된 플레이어의 위치 좌표가 필요하다
그러나 플레이어의 방향을 조종하려면 월드 공간과 무관한 플레이어의 로컬 좌표도 필요하다
그리고 이렇게 물체를 기준으로 설정된 방향 정보를 로컬 축이라고 표현한다
- 로컬 축
로컬 축 정보는 로컬 공간의 기저벡터와 동일한 값을 가진다
게임 엔진은 개발의 편의성을 위해 Transform에서 로컬 축의 데이터도 함께 제공하며
각 로컬 축은 월드의 X / Y / Z 축과 구분하기 위해 표로 정리하여 다음과 같이 표현한다

위와 같이 구성된 로컬 축은 오직 회전 정보에만 영향을 받게 되는데,
Transform의 이동과 크기 정보가 변경되더라도 게임 오브젝트가 보는 방향은 변함이 없기 때문이다

2차원 평면에서 게임 오브젝트의 Transform에 새로운 회전 값이 설정되면
로컬 축을 구성하는 표준기저 벡터도 변경되고 표준기저벡터가 변경된 값을 위와 같이 r과 u라는 값으로 설정한다

최종적으로 로컬 축 벡터를 사용하여 위와 같이 아핀 회전변환행렬을 생성하고
모델링 행렬에서 삼각함수 대신 로컬 축 정보를 사용하여 계산할 수 있다
로컬 축 정보는 Transform에서 회전이 발생할 때마다 갱신되며, 그 값을 사용하여 모델링 행렬을 계산한다
- 프로젝트에서의 구현

TransformComponent 클래스는 위와 같이 구성하였다
- SetRotation 함수와 AddRotation 함수 : 회전을 설정하고 증감
- Update 함수를 내부적으로 호출하여 로컬 축의 값도 함께 갱신
- Right 멤버변수와 Up 멤버변수 : 좌우상하에 대한 로컬 축 정보를 설정
- 각각 표준기저벡터 e1과 e2를 사용

GetModelingMatrix 함수를 호출하여 모델링 행렬을 생성한다
로컬 축 정보를 사용하여 모델링 행렬을 생성하며 사용하는 벡터 인자는 모두 열벡터를 사용한다

Update 함수를 호출하여 Transform의 회전에 따른 로컬축의 값을 갱신한다
_Rotation 변수에 저장된 각도 정보와 삼각함수를 사용하여 2개의 로컬축 벡터를 갱신하는데,
각각 표준기저벡터 e1과 e2에 대응한다
'수학 > 이득우의 게임 수학' 카테고리의 다른 글
| Scene의 구조 (2) - 모델링 행렬의 설계 (0) | 2025.12.31 |
|---|---|
| Scene의 구조 (1) - 프로젝트에서 Scene의 구성 (0) | 2025.12.24 |
| 게임 엔진의 구성 요소 (0) | 2025.12.24 |
| 무게중심좌표 (0) | 2025.12.03 |
| 메시 (0) | 2025.11.26 |