2014-09-04 2 views
6

필자는 3D 프로그래밍에 관한 A-Level을위한 논문을 작성해야합니다. 하지만 투시 투영 행렬을 이해하는 데 심각한 문제가 있습니다. 행렬을 자세히 설명해야합니다. 이 주제에 대해 많은 웹 사이트와 YouTube 동영상을 검색했지만 질문에 대한 대답은 거의 없습니다. 왜 그 자리에이 값이 있는지. 이 http://www.songho.ca/opengl/gl_projectionmatrix.html을 기반으로 어떻게 w-row가 작동하는지 알 수 있었지만 다른 세 가지를 이해하지 못합니다.영사 매트릭스는 어떻게 작동합니까?

나는 대칭 뷰포트에 대해 "간단한"버전만을 사용하기로 결정 (오른 손잡이 좌표 운전을.) :

![<code>r+l=0,</code>r-l=2r<code>(width);</code>t+b=0<code>,</code>t-b=2t<code>(height);</code>[n/r 0 0 0; 0 n/t 0 0; 0 0 -(f+n)/(f-n) -(2fn)/(f-n); 0 0 -1 0]`[1]

나는 나에게 처음 세 행을 설명하는 모든 시도에 매우 감사드립니다!

+3

누군가가 추락하기 전에 이것은 실제로 좋은 질문입니다. 나는 풀어서 쓸 수있는 대답을 쓸 시간이 없다.하지만 여기에 그 요지가있다. 2D에서 어떤 거리에서 x 축에 평행 한 선을 상상해 보라. x = l ... r; 이것은 가까운 투영 "선"입니다. 이제이 라인의 점을 범위 -1 ~ 1로 매핑하고 y_w와 offset w_w를 곱하여 y 좌표에 추가하여 y = n => w = 1이고 다른 점에 대해서는 w가 비례가되도록 매핑을 찾습니다. ~ y. – datenwolf

답변

8

매트릭스의 핵심 이유는 3D 좌표를 2D 평면에 매핑하고 멀리있는 물체를 더 작게 만드는 것입니다. 그냥이 훨씬 간단 매트릭스 접미사를 들어

(카메라 가정은 원점이며, Z 축)를 찾고 :

1 0 0 0 
0 1 0 0 
0 0 0 0 
0 0 1 0 

이 행렬에 곱한 후 w 좌표 renormalizing 후에는 정확하게있다. x,y,z,1은 각각 x/z,y/z,0,1이됩니다.

그러나 깊이 버퍼/필터가 작동하지 않으므로 깊이 정보가 없습니다 (모든 점에 대해 Z는 0 임). 이를 위해 행렬의 매개 변수를 사용할 수 있으므로 깊이 정보를 계속 사용할 수 있습니다.

1 0 0 0 
0 1 0 0 
0 0 0 1 
0 0 1 0 

이제 결과 점에 Z 좌표의 역 깊이가 포함됩니다. x,y,z,1은 각각 x/z,y/z,1/z,1이됩니다.

여분의 매개 변수는 축척과 변환을 사용하여 좌표 상자를 (-1,-1,-1) - (1,1,1) 장치 상자 (사용자가 외부에있는 경우 그려지는 경계 상자)에 매핑 한 결과입니다.

+1

대단히 감사합니다! 누군가가 마침내 그것을 한 문장으로 설명하면 사실 간단합니다! –

관련 문제