728x90
반응형

- 투영(Projection)

n 차원의 공간을 n-1차원으로 표현하는 것을 의미.

( 보통 3D 환경을 접하는 매체가 2차원 화면이라서 2차원으로 가공하는 처리를 해 주는 것. )

절두체 안에 존재하며 관찰자의 시야 범위이다.

 

- 투영행렬

파이프라인 단계의 투영 과정 시에 이루어지는 작업을 위한 정보를 준비하는 것.

 

- 투영 행렬의 역할

X, Y, Z의 값을 변형시키는 역할을 하며, 여기서 X, Y의 기준은 Fov 시야각에 따른 비율이 필요하고, Z 값을 조절하는 A, B 값은 투영 공간 속에 표현될 Z의 비율을 구하는 역할을 해준다. 여기서 구체적인 값을 구해낼 때는 Near의 평면의 Z가 0이고, Far 평면의 Z가 1이라는 점을 사용한다.

 

행렬에 Z'를 구하는 임의 식 A와 B가 있고, P의 Z값에는 Near의 Z값인 0과 Far의 Z값인 1을 넣은 상태라고 하고, 행렬 곱을 하면 A와 B의 값을 구할 수 있다.

 

- 참고

http://leeminsang19930211.blogspot.com/2018/07/persfective-projection-matrix.html

 

투영 행렬 ( Persfective projection matrix )

■ 동차 좌표 동차좌표란 n+1 차원의 특정한 좌표들이 사영된 n차원에서는 같다(동차)라는 것을 나타내는 좌표계이다..라고 하면 뭔소리인가 싶을것다. 그래서 예를들어 이런식으로 3차원의 점 P

leeminsang19930211.blogspot.com

 

W와 H값은 시야각도인 Fov각도에 따라 구성된 직각삼각형의 비율에 따라 결정된다.

시야 범위를 표현할 각도가 있고, 이를 투영연산에 반영할 수 있도록 만드는 작업을 해야하는데, 알고 있는 정보는 시야를 표현할 각도가 전부이다. 이 각도만으로 정점 연산을 위한 비율을 구해낸다.

 

시야각을 절반으로 나눈것을 각도로 생각한다고 하면 직각 삼각형을 구성할 수 있다. 

직각삼각형의 가로변(a), 세로변(b)이라고 했을 때 b변은 시야범위의 세로(혹은 가로)를 절반으로 나눈 것이 되며, a변은 현재 시야 범위의 거리를 나타낸다. 

-> b변에 대한 a의 비율을 정점에 연산하면, 시야각에 따른 정점 변환이 가능해진다.

 

직각 삼각형 범위에서 비율을 구하는 이유?

-> 직각 삼각형은 삼각비를 통해 각도에 따른 비율을 알아 낼 수 있기 때문.

 

현재 필요한 a / b를 구하기 위해서는 각도에 따른 cot(코탄젠트) 연산을 거쳐야 하는데 코탄젠트 함수는 제공되지 않으므로, tan(탄젠트)의 역수를 대신 사용한다.

 

그래서 결과적으로,

1 / tan ( Fov / 2) 

이런 기본형 식이 나오게 된다.

 

x스케일만 종횡비를 나누고 있는 이유는?

-> 투영스페이스 정사각형, 뷰포트는 직사각형이다.
투영스페이스에서 뷰포트로 그대로 옮기면 늘어나서 똑같이 표현이 안된다. 그래서 투영단계에서 x를 미리 줄여놓는 것. x 쪽 크기가 왜곡되지 말라고.

 

 

- 참고

http://egloos.zum.com/EireneHue/v/985792

 

Direct3D : 카메라 (Camera) 2 - 투영행렬 (Projection Matrix)

뷰 행렬(View Matrix) 에 이어서 이번에는 투영행렬(Projection Matrix) 에 대해서 살펴보도록 하겠습니다. 뷰행렬이 랜더링 파이프라인 단계의 3번째 단계인 뷰 스페이스를 구성하는데 사용되는 설정을

egloos.zum.com

 

728x90
반응형

+ Recent posts