서론
resterization에서 가장 먼저 해야할 일은, 가상의 object를 화면에 투영했을 때, 화면의 픽셀과 곂치는 부분이 있는지를 확인하는 것이다. 투영 방식에는 Orthographic, perspective projection 이 있다. 해당 글에서는 간단한 논의를 위해서 Orthographic projection(정투영)을 사용하여 설명한다.
(DirectX, OpenGL과 같은 그래픽스 API에서는 이를 inside-outside test라고 부르기도 한다 )
Orthographic projection vs perspective projection
마지막으로 판별된 픽셀에 대해서 색상을 지정해주면 된다.

해당 글에서는 inside-outside test를 위해서 reserization에서 일반적으로 사용되는 방법인 edge function에 대해서 알아본다. 해당 방법을 사용하면 픽셀이 삼각형 내부에 있는지 판별하는 것 뿐만아니라 barycentric coordinates라는 중요한 좌표정보를 얻을 수 있다.
시작하기에 앞서서 edge function이 뭔지를 resterization에서 기본적으로 사용되는 삼각형을 가지고 설명한다.
먼저 삼각형의 각 edge가 평면을 두 개로 나누는 무한한 선분이라고 생각해보자. 확인해보려는 지점을 P라고 할 때, 해당 선분과 P의 상대적 위치를 알 수 있다. 어떻게 이를 알 수 있을까?

선분과 P에 대해서 Cross product를 사용하여, 해당하는 면적에 대한 부호로 위치를 그림과 같이 확인할 수 있다. 0일 경우에는 P가 선분위에 위치한다. 이를 삼각형의 모든 edge에서 수행하고, 그림에서는 모두 양수(positive)가 나올 경우, P가 삼각형 내부에 있다고 판단할 수 있다.

이것을 pineda’s method라고 한다.
이제 수식을 보면서 더 자세하게 알아본다.
Edge function

위에서 언급한 내용을 수식을 사용해서 표현해본다.
해당 식을 계산하면, 지금은 2차원 벡터를 가정하고 있으므로, 두 벡터가 이루는 사각형의 넓이를 알 수 있다. 여기서 중요한 것은 넓이 보다는 넓이의 부호(sign)로, 두 벡터간의 상대적 위치를 알 수 있다는 점이다.

그림과 같이 벡터 A와 B가 이루는 각도가 사이에 있다면 넓이는 양수(+) 값을 가지고, 사이에 있다면 음수(-)의 값을 가지게 된다. 그림에서 는 양수를 가지며 A보다 오른쪽에 있음을 알 수 있다. 반대로 B는 A의 왼쪽에 있으며, 음수값을 가지는 것을 알 수 있다.
넓이를 구하는 방법
지금까지는 2차원의 벡터를 가지고, 해당하는 벡터들이 이루는 사각형의 넓이의 부호를 알아봤는데, 3차원에서는 어떻게 하면 될지 알아본다.
위에서 살펴봤지만 2차원의 두 벡터가 이루는 사각형의 넓이를 구하는 방법은 다음과 같다.
3차원에서는 cross product의 결과 벡터의 크기가 사각형의 넓이를 나타내기에, 다음과 같은 식으로 표현할 수 있다.
방향의 고려
마지막으로 Edge function을 어떤 방향으로 수행할 것인지에 따라서 값이 변하는 것을 주의해야 한다.

시계방향, 반-시계방향에 따라서 계산 결과가 음수냐 양수냐가 달라지기 때문이다.

V0={0,0,0}, V1={1,0,0}, V2={0,-1,0}
(V1-V0)={1,0,0}, (V2-V0)={0,-1,0} 의 값을 넣고 시계방향으로 계산하면 다음과 같다.
이처럼 넓이가 음수값을 가지는 것을 알 수 있다.
이제 반-시계방향으로 계산하면 다음과 같다.
이처럼 서로 반대 방향을 가리키는 것처럼 연산되는 것을 알 수 있다.
방향을 고려하기 이전에 고려했던 것들은 CW로 계산을 수행했지만, 일반적인 Graphics API (OpenGL, DirectX)에서 기본적으로 CCW로 삼각형의 정점을 계산하므로, CCW를 염두해 두고 생각하는 것이 좋다. 가장 중요한 것은 한가지 방식을 고수하는 것이다.