- 개요

위와 같이 깊이 값까지 포함된 원근 투영 행렬을 사용하여 화면에 원근감을 부여한다
- 예제
1) 깊이 값을 제공하는 최종 원근 투영 행렬을 제공하는 카메라

프로젝트에서 사용하는 카메라인 CameraObject 클래스를 위와 같이 정의하였다
GetPerspectiveViewMatrix 함수를 호출하여 카메라의 뷰 행렬과 원근 투영 행렬을 곱한 행렬을 반환한다
원근 투영 행렬에 필요한 근평면과 원평면의 값을 각각 _NearZ 변수와 _FarZ 변수에 저장한다

GetPerspectiveMatrix 함수를 호출하여 깊이 값이 포함된 원근 투영 행렬을 반환한다
순서대로 공통 분모의 값을 계산하고 원근 투영 행렬의 3행 3열 + 3행 4열의 값을 계산한다
이후 계산된 값을 토대로 원근 투영 행렬을 구성하고 반환한다

GetPerspectiveViewMatrix 함수를 호출하여 최종적으로 카메라의 뷰 행렬과 원근 투영 행렬을 곱하여 반환한다
2) 렌더링 로직에서의 최종 원근 투영 행렬 활용

프로젝트에서 렌더링 로직을 담당하는 Render3D 함수를 위와 같이 구성하였다
카메라로부터 GetPerspectiveViewMatrix 함수를 호출하여
뷰 행렬과 원근 투영 행렬을 곱한 복합 행렬을 가져와 pvMatrix 로컬 변수에 저장한다
pvMatrix 로컬 변수와 모델링 행렬을 곱하여 최종 정점의 변환을 수행한다
이후 pvMatrix 로컬 변수에 플레이어의 위치를 곱하여 플레이어의 클립 좌표를 계산한다
클립 좌표의 마지막 요소인 W는 뷰 좌표의 -Z 값을 의미하여, 이는 카메라의 거리를 의미한다
계산한 카메라의 거리를 cameraDepth 로컬 변수에 저장한다
cameraDepth 변수의 값을 보간하고 NDC의 깊이 값을 계산한다
최종적으로 NDC의 깊이 값과 깊이 값을 화면에 출력한다
- 최종 실행 결과

'수학 > 이득우의 게임 수학 - 실습 예제' 카테고리의 다른 글
| 절두체 컬링의 구현 (0) | 2026.07.01 |
|---|---|
| 캐릭터 얼굴에서 발생한 왜곡 보정 (0) | 2026.06.10 |
| 화면에 원근감 부여하기 (0) | 2026.05.27 |
| 3차원 공간에서의 자유로운 회전 (0) | 2026.05.06 |
| 백페이스 컬링의 구현 (0) | 2026.05.06 |