2017-10-18 5 views
3

번호 원본에 따르면 NDC는 W 구성 요소에 의한 분할 후 단지 클립 공간이라는 점에서 클립 공간과 다릅니다. 프리 머 티브는 OpenGL에서 X, Y 및 Z 축을 따라 -1 대 1 인 클립 공간에서 잘립니다 (편집 : 잘못되었습니다, 응답 참조). 즉, 클립 공간은 큐브입니다. 이 큐브 내에서 클리핑이 수행됩니다. 안쪽에 떨어지면 눈에 보이고 바깥쪽에 있으면 눈에 보이지 않습니다.원근법 설명?

이 간단한 예제를 살펴 보겠습니다. 뷰잉 절두체의 위에서 아래로, 음의 Y 축을 보았습니다. HALFFOV는 45도이며 NEAR과 RIGHT가 모두 동일합니다 (이 경우 길이 2). 예제 포인트는 (6, 0, -7)입니다.

enter image description here

이제 여기 원근 투영 매트릭스이다 : 우리는 (1)의 애스펙트 비를 사용할 것이다 편의상

enter image description here

1. 그래서 :

RIGHT = 2 
LEFT = -2 
TOP = 2 
BOTTOM = -2 
NEAR = 2 
FAR = 8 

우리의 투영 행렬을 얻을 그래서 우리의 가치에 작성 : 이제 우리는했다 우리 지점에 균일 W 추가

enter image description here

을 (6, 0, -7) get (6, 0, -7, 1)을 얻는다.

이제 행렬에 점을 곱해 (6, 0, 6.29, 7)이됩니다. 이 시점 (투영 행렬을 곱한 후의 점이 "클립 공간"에 있다고 가정 함)이 단계에서 클리핑 큐브의 내부 또는 외부에 점이 있는지 여부를 알아 내고,

나는 그것이 위와 같이 보이는 클리핑은,이 단계에서 수행되는 본 적이 소스에서

enter image description here

W.로 나누어 전에 : 그것은 "클립 공간"에서의 모습 W.과 부문은 여기입니다 지금 W로 나눈다면, 포인트는 클립 스페이스 큐브의 오른쪽 영역에서 끝납니다. 그래서 내가 왜 모든 사람들이 클리핑 공간 이후에 투시 분할이 수행된다고 말하는지 이해하지 못합니다.이 공간에서, 투시 분할 전에 그 지점은 완전히 바깥에 자리 잡고 있으며 클리핑 공간 밖에서 볼 수없고 보이지도 않습니다. 그러나 W에 의해 관점 분할, 분할 후, 여기 보이는 방법입니다

enter image description here

이제 점은 클립 공간 큐브 내에있는, 내부로 판단 할 수 있으며, 눈에 보이는. 이것이 클리핑 전에 공간 분할이 완료되었다고 생각하는 이유입니다. 왜냐하면 클리핑 공간이 각 축에서 -1에서 +1까지이고 클리핑 스테이지가이 차원에 대해 검사를 수행하기 때문에이 큐브 안에있는 점이 이미 분할을 거쳐야하기 때문입니다 그렇지 않으면 거의 모든 점은 클리핑 공간 큐브 바깥에 놓이며 절대 보이지 않습니다.

왜 모든 사람들은 투영 매트릭스의 결과 인 클리핑 공간이 온다고 말하면서 NDC를 초래하는 원근법 분할 (W로 나누기)가 있습니까?

+0

가능한 복제 (https://stackoverflow.com/questions/6111721/understanding-the-projection-matrix) –

+0

나는 그 질문 자체에서 많은 것을 배웠다. –

답변

5

클립 공간에서 클리핑이 단위 큐브에 대해 수행되지 않습니다. 옆면 길이가 w 인 입방체에 대해 수행됩니다. 각 x, y, z 좌표가 w 좌표보다 작 으면 표시 영역 안에있는 점입니다.세 개의 좌표 (x, y, z)의보다 작은 제

주이기 때문에 사용자가이 예에서

는 점 [6, 0, 6.29, 7] 그 가시 영역 내부에 점, 이것은 정확히 동등한, 표시 테스트 x/w < 1. 문제는 w- 값이 음수이므로 균질 분할로 보이는 영역에 투영 될 수 있으므로 먼 평면의 앞쪽에서 시작합니다. 우리 모두 알고 있듯이, 부등호로 음수로 나누면 연산자가 바뀔 것이며, 이는 하드웨어에서 실용적이지 못합니다.

또한 측정 : 프로젝션 매트릭스 이해]의
OpenGL sutherland-hodgman polygon clipping algorithm in homogeneous coordinates

Why clipping should be done in CCS, not NDCS Why does GL divide gl_Position by W for you rather than letting you do it yourself?

+0

정말 고마워요. 그래서 클리핑은 -1에서 +1 입방체에 대해 수행되지 않으며, -w에서 + w 큐브에 대해 수행됩니다. 글쎄 그건 완전 의미가 있습니다. 하지만, 클립 공간이 -1에서 +1 입방으로 정의 된 모든 곳에서 오해의 소지가 있다고 생각합니다. – Zebrafish

+0

일반적으로 NDC 공간의 가시 영역은 -1에서 1까지입니다. 질문에서 어떤 링크도 제공하지 않았으므로 이러한 질문을 확인할 수 없었습니다. – BDL

+0

나는 그것을 계속 보았을 것이라고 확신한다. 그러나 이제 나는 기쁘다. "대부분의 사람들은 클립 공간을 큐브 [-1,1]^3으로 상상해 봅니다. 그러나 클립 공간이 아닙니다." – Zebrafish