수학/이득우의 게임 수학

Scene의 구조 (3) - 로컬 공간과 로컬 축

monstro 2026. 1. 7. 11:39
728x90
반응형

- 개요

물체를 표현하기 위해 만들어진 메시 데이터자신만의 공간에서 물체를 구성하는 각 정점의 위치 정보를 저장한다

이헐게 물체의 정보를 저장하기 위해 부여한 공간을 로컬 공간이라고 표현한다

그런데 게임 콘텐츠는 다양한 종류의 물체가 모여 배경을 이루므로 여러 물체를 담을 별도의 공간이 필요하다

여러 물체를 모아 게임 콘텐츠를 만드는데 사용하는 새로운 공간을 월드 공간이라고 표현한다

 

월드 공간의 축과 로컬 공간의 축

 

따라서 게임 콘텐츠에서는 게임 오브젝트마다 월드 공간로컬 공간이라는 2개의 공간 개념이 존재한다

그러므로 주어진 2개의 공간 정보를 적절하게 활용해야 한다

위와 같은 상황에서 기본적으로 월드 공간을 중심으로 설정된 플레이어의 위치 좌표가 필요하다

그러나 플레이어의 방향을 조종하려면 월드 공간과 무관한 플레이어의 로컬 좌표도 필요하다

그리고 이렇게 물체를 기준으로 설정된 방향 정보를 로컬 축이라고 표현한다

 

- 로컬 축

로컬 축 정보로컬 공간의 기저벡터동일을 가진다

게임 엔진은 개발의 편의성을 위해 Transform에서 로컬 축의 데이터도 함께 제공하며

각 로컬 축은 월드의 X / Y / Z 축구분하기 위해 표로 정리하여 다음과 같이 표현한다

 

로컬 축과 로컬 축의 이름

 

위와 같이 구성된 로컬 축은 오직 회전 정보에만 영향을 받게 되는데,

Transform의 이동크기 정보가 변경되더라도 게임 오브젝트가 보는 방향은 변함이 없기 때문이다

 

로컬 공간의 표준기저벡터 e1과 e2의 변환값 r과 u

 

2차원 평면에서 게임 오브젝트의 Transform새로운 회전 값이 설정되면

로컬 축을 구성하는 표준기저 벡터도 변경되고 표준기저벡터가 변경된 값을 위와 같이 ru라는 값으로 설정한다

 

로컬 축 벡터를 사용한 아핀 회전변환행렬과 모델링 행렬

 

최종적으로 로컬 축 벡터를 사용하여 위와 같이 아핀 회전변환행렬을 생성하고

모델링 행렬에서 삼각함수 대신 로컬 축 정보를 사용하여 계산할 수 있다

로컬 축 정보는 Transform에서 회전이 발생할 때마다 갱신되며, 그 값을 사용하여 모델링 행렬을 계산한다

 

- 프로젝트에서의 구현

TransformComponent 클래스의 구성

 

TransformComponent 클래스는 위와 같이 구성하였다

  • SetRotation 함수와 AddRotation 함수 : 회전을 설정하고 증감
    • Update 함수를 내부적으로 호출하여 로컬 축의 값도 함께 갱신
  • Right 멤버변수와 Up 멤버변수 : 좌우상하에 대한 로컬 축 정보를 설정
    • 각각 표준기저벡터 e1e2를 사용

 

모델링 행렬을 생성하는 GetModelingMatrix 함수

 

GetModelingMatrix 함수 호출하여 모델링 행렬을 생성한다

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

 

Transform의 회전에 따라 로컬 축을 갱신하는 Update 함수

 

Update 함수호출하여 Transform의 회전에 따른 로컬축의 값을 갱신한다

_Rotation 변수에 저장된 각도 정보삼각함수를 사용하여 2개의 로컬축 벡터를 갱신하는데,

각각 표준기저벡터 e1e2에 대응한다

 

728x90
반응형

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

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