인프런 커뮤니티 질문&답변

김진영님의 프로필 이미지
김진영

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12

직교 투영

Orthographic Projection행렬과 Perspective Projection행렬의 차이점에 대해서..

작성

·

465

0

여태까지는 Perspective Projection행렬을 이용하여, 동차 clip 좌표를 구해서, 실질적인 depth값을 Rasterizer단계에서 구해진다고 배워 왔습니다. 

그런데, 이번 강의에서 배운 Orthographic Projection행렬을 곱하게 되면, depth값이 0~1사이로 바로 나오게 된다고 이해하고 있습니다. 

질문1. 우선 위 내용을 보시고 제가 이해할 것이 맞는지?!

질문2. 만약 제가 이해를 잘못 했다고 하면, Orthographic Projectino행렬을 곱하여도 그 값은 아직 완전한 depth값이 아니라 Rasterizer단계에서 구해지는 건가요?

질문3. Orthgraphic Projection행렬에는 FOV값이 필요 없다고 하였는데, 그건 왜 그런건가요?? gameObject가 직교 투영 대상이기만 하면, 다 그려줘야 하기 때문인가요?

답변 2

0

3번) FOV 값은 카메라가 보는 위 아래 시야 각입니다.

        직교 투영의 경우 물체와의 거리비와 상관 없이 범위 내의 물체를 그대로 출력하기 때문에 FOV값이

        필요가 없는듯 보입니다.

(쉽게 말해 원근 투영은 먼 거리의 물체는 작게 가까운 거리의 물체는 크게 출력하는데 이 때 거리 대비 화면의 비율을 구할 때 FOV값이 쓰입니다. 하지만 직교 투영의 경우 가깝건 멀건 물체 크기 그대로를 출력하기 때문에 거리 대비 화면의 비율을 구할 필요가 없습니다. 따라서 출력할 범위인 가로, 세로, near, far만 넣어주는 것입니다.)

김진영님의 프로필 이미지
김진영
질문자

아 그렇군요. 이해했습니다. 감사해용

0

위 그림에서 보시다시피 clipping을 위해 unit cube로 변환해주는 과정에서 depth값을 왼편의 근거리와 원거리 좌표에 해당하는 (n, f)을 오른편의 (-1, 1) 좌표로 변환해주게 됩니다. 즉, 이 좌표는 depth값에 해당하고 이 과정은 rasterization 단계가 아닌  clipping 단계에서 이루어지게 됩니다.  Rasterization 단계에서는 이렇게 변환된 '논리적' 좌표값들을  디스플레이의 스크린을 구성하는 픽셀들의 '물리적' 좌표로 mapping하는 작업을 합니다.

 

[이미지 출처: http://www.songho.ca/opengl/gl_projectionmatrix.html]

김진영님의 프로필 이미지
김진영

작성한 질문수

질문하기