선분 $\overrightarrow{vertex0\text{ }vertex1}$ 을 NDC 공간의 평면에 맞도록 잘라줍니다. 인자로 받은 정점(Vertex)인 vertex0
,vertex1
는 항상 클립 좌표(clip coordinate)이어야 하며, testRight(), testLeft(), testTop(), testBottom(), testFar(), testNear() 의 결과가 1
이어야 합니다.
해당 함수들은 Renderer.clipTriangle0() 의 구현에 사용됩니다.
clipRight(vertex0, vertex1, out);
clipLeft(vertex0, vertex1, out);
clipTop(vertex0, vertex1, out);
clipBottom(vertex0, vertex1, out);
clipNear(vertex0, vertex1, out);
clipFar(vertex0, vertex1, out);
vertex0
선분 $\overrightarrow{vertex0\text{ }vertex1}$ 의 시작점을 나타내는 Vertex
. vertex0.position
은 항상 클립 좌표(clip coordinate)이어야 합니다.
vertex1
선분 $\overrightarrow{vertex0\text{ }vertex1}$ 의 끝점을 나타내는 Vertex
. vertex1.position
은 항상 클립 좌표(clip coordinate)이어야 합니다.
out
결과를 담을 Vertex
. Vertex.position, Vertex.uv
는 NDC 공간에 맞도록 보간됩니다. 예를 들어 testRight()
라면, 선분 $\overrightarrow{vertex0\text{ }vertex1}$ 에서 우측 평면(right plane)에 위치한 정점($\acute{vertex1}$)이 결과입니다.
(none)
testRight(), testLeft(), testTop(), testBottom(), testFar(), testNear() 을 통해 삼각형(Triangle)의 일부분이 NDC 공간의 밖에 있다고 판단되면, NDC 공간 안에 들어있는 부분만 렌더링할 수 있도록 잘라주어야 합니다.
삼각형을 자른다는 것은, 삼각형을 이루는 선분(segment)을 자른다는 의미입니다. clipRight(), clipLeft(), clipTop(), clipBottom(), clipNear(), clipFar()
는 여기서 선분 하나를 NDC 공간에 맞도록 잘라주는 역할을 담당합니다. 그렇다면 선분을 어떻게 잘라야 할까요?
오브젝트 좌표(object coordinate)인 점 $\vec{p0}, \vec{p1}$ 가 있다고 합시다. 여기서 Camera.perspective() ⇒ Camera.clipToNDC() 과정을 거치면 NDC 좌표가 됩니다.