도구스개발

3D 원근 투영 행렬 계산기

시야각(FOV)·종횡비·근평면·원평면을 넣으면 4×4 원근 투영 행렬을 표준 공식대로 채웁니다. 근평면·원평면이 정규화 장치 좌표(NDC) −1과 1로 정확히 눌리는지도 확인할 수 있습니다.

°

예: 16:9 화면이면 1.778

f_scale = 1/tan(FOV/2)

1.7321

x축은 이 값을 종횡비로 나눠 씁니다

0.9743000
01.732100
00-1.002-0.2002
00-10
근평면(z=−near)의 NDC z-1
원평면(z=−far)의 NDC z1
근평면·원평면이 정확히 −1·1로 눌립니다. 동차좌표에 이 행렬을 곱한 뒤 w로 나누는 원근 나눗셈을 거치면, z=−근평면일 때와 z=−원평면일 때의 결과가 정확히 −1과 1이 됩니다. 위 표의 두 값이 그 검산 결과입니다.
종횡비는 x축에만 곱해집니다. 이 행렬은 수직 시야각(FOV)을 기준으로 만들어지고, 수평 시야각은 종횡비만큼 자동으로 넓어집니다. 그래서 x축의 확대율(f_scale/종횡비)만 종횡비로 나눠 수평·수직 방향의 화면 비율을 맞춥니다.

사용 방법

  1. 1수직 시야각(FOV)을 도(°) 단위로 입력합니다.
  2. 2화면 종횡비(가로/세로)를 입력합니다.
  3. 3근평면·원평면 거리를 입력합니다.
  4. 4완성된 4×4 투영 행렬과, 근평면·원평면이 NDC −1·1로 눌리는지 확인합니다.

자주 묻는 질문

카메라가 보는 절두체(가까운 면은 좁고 먼 면은 넓은 각뿔대 모양의 시야 영역)를 정규화 장치 좌표(NDC, x·y·z 모두 −1~1)라는 정육면체 공간으로 눌러 담는 4×4 행렬입니다. 이 변환 덕분에 화면에 그릴 때 멀리 있는 물체가 작게, 가까운 물체가 크게 보입니다.

동차좌표에 이 행렬을 곱한 뒤 w로 나누는 원근 나눗셈을 거치면, z=−근평면일 때와 z=−원평면일 때의 결과가 정확히 −1과 1이 되도록 행렬의 각 성분이 설계되어 있습니다. 직접 대입해 계산하면 확인할 수 있고, 이 계산기의 검증 과정이기도 합니다.

f_scale = 1/tan(시야각/2) 값이 커집니다. 시야각이 좁을수록 f_scale(확대율)이 커져 같은 물체가 화면에 더 크게(더 확대되어) 보입니다 — 망원 렌즈로 좁게 확대해서 보는 것과 같은 효과입니다.

이 행렬은 수직 시야각(fovY)을 기준으로 만들어지고, 수평 시야각은 종횡비만큼 자동으로 넓어집니다(tan(수평시야각/2) = 종횡비 × tan(수직시야각/2)). 그래서 x축의 확대율(f_scale/종횡비)만 종횡비로 나눠 수평·수직 방향의 화면 비율을 맞춥니다.

그래픽스 파이프라인에서 회전과 투영은 서로 다른 단계입니다. quaternion-euler는 물체의 회전을 표현하는 방식을 다루고, 이 계산기는 카메라가 본 3D 장면을 화면에 투영하는 마지막 단계의 행렬을 다룹니다.

알아두면 좋은 점

  • 오른손 좌표계(카메라가 −z 방향을 본다)를 쓰는 OpenGL 계열의 관례를 따릅니다. DirectX 등 다른 그래픽스 API는 좌표계·부호가 다를 수 있습니다.
  • 근평면·원평면 거리는 모두 양수(카메라로부터의 거리)로 입력합니다. 원평면은 반드시 근평면보다 커야 합니다.
  • 시야각은 0°와 180° 사이여야 계산할 수 있습니다.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 3일 · 결과는 참고용 추정치입니다.