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

깊이 값을 적용하여 화면에 원근감 부여하기

monstro 2026. 6. 3. 19:47
728x90
반응형

- 개요

깊이 값까지 포함된 최종 원근 투영 행렬

 

위와 같이 깊이 값까지 포함된 원근 투영 행렬을 사용하여 화면에 원근감을 부여한다

 

- 예제

1) 깊이 값을 제공하는 최종 원근 투영 행렬을 제공하는 카메라

 

프로젝트에서 사용하는 카메라인 CameraObject 클래스를 위와 같이 정의하였다

GetPerspectiveViewMatrix 함수를 호출하여 카메라의 뷰 행렬원근 투영 행렬곱한 행렬을 반환한다

원근 투영 행렬에 필요한 근평면원평면의 값을 각각 _NearZ 변수와 _FarZ 변수에 저장한다

 

 

GetPerspectiveMatrix 함수를 호출하여 깊이 값이 포함된 원근 투영 행렬을 반환한다

순서대로 공통 분모의 값을 계산하고 원근 투영 행렬의 3행 3열 + 3행 4열의 값을 계산한다

이후 계산된 값을 토대로 원근 투영 행렬을 구성하고 반환한다

 

 

GetPerspectiveViewMatrix 함수를 호출하여 최종적으로 카메라의 뷰 행렬원근 투영 행렬을 곱하여 반환한다

 

2) 렌더링 로직에서의 최종 원근 투영 행렬 활용

 

프로젝트에서 렌더링 로직을 담당하는 Render3D 함수를 위와 같이 구성하였다

카메라로부터 GetPerspectiveViewMatrix 함수를 호출하여

뷰 행렬원근 투영 행렬을 곱한 복합 행렬을 가져와 pvMatrix 로컬 변수에 저장한다

pvMatrix 로컬 변수와 모델링 행렬을 곱하여 최종 정점의 변환을 수행한다

이후 pvMatrix 로컬 변수에 플레이어의 위치를 곱하여 플레이어의 클립 좌표를 계산한다

클립 좌표의 마지막 요소인 W뷰 좌표의 -Z 값을 의미하여, 이는 카메라의 거리를 의미한다

계산한 카메라의 거리cameraDepth 로컬 변수에 저장한다

cameraDepth 변수의 값을 보간하고 NDC의 깊이 값을 계산한다

최종적으로 NDC의 깊이 값과 깊이 값을 화면에 출력한다

 

- 최종 실행 결과

 

728x90
반응형