클리핑 할 때 정점을 보간하는 방법은 무엇입니까?
균질 한 클립 공간에서 클립 할 때 가장자리와 클립 평면 사이의 교차점에 새로운 정점을 생성해야합니다. 따라서 우리는$(x , y, z , w)$두 정점의 위치를 지정하여 새 정점 위치를 생성합니다. 모두 괜찮아 보이지만 보간 후 생성 된 정점이 aw가 0이면 어떻게해야합니까?
w-divide가 점을 무한대로 (0으로 나누기)로 만들기 때문에 작동하지 않습니다.
그렇다면 aw가 0 인 정점을 생성하지 않도록해야합니까 (어떻게?)? 아니면 그냥 null w (어떻게?)를 처리해야합니까?
이런 상황은 결코 발생하지 않는다고 말할 수 있지만, 실제로는 발생합니다. 특히 예를 들어 스카이 박스의 경우 정점의 z가 w로 설정 될 때 발생합니다. 이 경우, 가까운 평면 (클립 공간에서 z = 0)에 대해 클립하고 위치를 보간하면 az가 0이되고 aw가 0이됩니다.
답변
카메라 앞의 포인트는 $w > 0$엄격하게 정의에 따라. 클리핑이 당신에게 포인트를 준다면$w = 0$ 그러면 뭔가 잘못되고 있습니다.
왼쪽 / 오른쪽 / 위쪽 / 아래쪽 자르기 평면을 고려하십시오. 삼각형이 보이는 절두체의 일부에서$w = 0$ 카메라 평면 또는 그 뒤에, 절두체 측면 평면 중 하나 또는 양의 거리에있는 근거리 평면 $w_\text{near} > 0$.
스카이 박스와 설정을 언급하셨습니다 $z = w$버텍스 셰이더 출력에서. 이러한 형상은 가까운 평면에 도달하기 전에 절두체 측면 평면을 교차해야합니다. (스카이 박스의 일부가 니어 플레인에 의해서만 잘릴 수있을만큼 카메라에 충분히 가까워 질 수있는 방법은 무엇입니까?) 모든 절두체 플레인 에 대해 올바르게 클리핑하는 경우 ,$w > 0$ 최종 정점에서.