수학/이득우의 게임 수학

카메라 시스템

monstro 2026. 1. 28. 11:45
728x90
반응형

- 개요

게임 엔진 개발자 관점에서 바라보는 게임 공간사용자 관점에서 바라보는 게임 공간의 2가지 화면을 제공한다

이를 위해 필요한 것이 카메라인데, 프로젝트에서는 따로 카메라를 구현하지 않지만

사용자 관점에서 바라볼 필요가 있으므로 카메라를 어떻게 구현해야 하는지 알아본다

 

- 가상 공간의 카메라

카메라자신이 출력할 화면의 정보를 가지고 월드의 일부를 그려낸다

이때 카메라가 출력할 화면의 크기 정보뷰포트라고 표현한다

사용자가 바라보는 게임 공간의 크기가 바로 뷰포트를 의미한다

 

로컬 공간 / 월드 공간 / 뷰 공간

 

카메라는 카메라에 설정된 뷰포트 정보를 바탕으로 월드 공간의 일부를 렌더링해야 한다

이를 위해 카메라를 중심으로 물체의 Transform을 재조정하는 작업이 필요한데,

카메라를 중심으로 변환한 공간을 뷰 공간이라고 표현한다

로컬 공간 + 월드 공간 + 뷰 공간의 개념을 그림으로 표현하면 위와 같다

 

- 뷰 공간의 설계

모델링 행렬로컬 공간의 좌표월드 공간의 좌표로 변환하는 행렬이다

동일하게 월드 공간의 좌표뷰포트 공간의 좌표로 변환하는 행렬이 존재하는데, 이를 뷰 행렬(V)이라고 표현한다

 

뷰 행렬

 

뷰 행렬은 위와 같이 구성되어 있으며 카메라의 Transform이 설정되어 있다

이동 행렬의 역행렬을 계산하면 뷰 행렬을 완성할 수 있다

 

로컬 공간의 좌표를 뷰 공간의 좌표로 변환하는 행렬

 

뷰 행렬이 완성되면 로컬 공간의 좌표(𝑣_𝑙𝑜𝑐𝑎𝑙)뷰 공간의 좌표(𝑣_𝑣𝑖𝑒𝑤)로 변환하는 행렬을 설계할 수 있다

뷰 행렬(V)모델링 행렬(M)을 곱한 행렬(VM)은 로컬 공간을 뷰 공간으로 변환한다

곱해진 행렬에 메시의 정점을 곱하면 모든 정점의 위치카메라를 중심으로 재배치된다

따라서 최종적으로 완성된 행렬은 위와 같다

 

- 프로젝트에서의 카메라 구현

1) 뷰 행렬을 제공하는 CameraObject 클래스

 

카메라의 역할을 수행하는 CameraObject 클래스는 위와 같이 구성되어 있다

게임 오브젝트와 동일하게 Transform이 존재하면서 추가적으로 뷰 행렬을 반환할 수 있도록 설계하였다

 

2) 게임 엔진의 카메라

 

게임 엔진의 역할을 수행하는 GameEngine 클래스에서 CameraObject를 위와 같이 사용한다

2개의 함수를 사용하여 메인 카메라의 레퍼런스를 가져올 수 있도록 구성하였다

그리고 _MainCamera 멤버변수를 사용하여 항상 카메라가 설정될 수 있도록 설계하였다

728x90
반응형

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

3차원 공간의 트랜스폼  (0) 2026.02.11
3차원 공간의 설계  (0) 2026.02.04
렌더링 파이프라인  (0) 2026.01.21
게임 엔진의 워크플로우  (0) 2026.01.14
리소스 저장소  (0) 2026.01.14