포스트

컴퓨터그래픽스 18. Clipping이 무엇인가


Clipping이 무엇인가?

화면 밖에 있는 객체를 그릴지 말지 결정하는 방법이다. 즉, 어떤 부분이 카메라에 보이는지 알아채야 한다. 어떻게 가능할까?

(1) Point Clipping 그냥 Vertex의 위치가 화면 안에 있으면 그리고, 그렇지 않으면 버린다. 사영된 Vertex의 위치를 \((x,y)\)라고 하자.

\[x_{min} < x < x_{max} ~~\cap~~ y_{min} < y < y_{max}\]

위 조건으로 판별한다. Cliping은 언제 일어날까?

Vertex Processor → Primitive Assembly → Clipping → Rasterizer → Fragment Processor

Primitive Assembly과 Rasterizer 사이에 일어난다. 만약 Primitive Type이 Points면 쉽게 걸러낼 수 있다. 그렇지 않고 Primitive Type이 Geometry라면, 예외가 존재한다. Primitive중 일부가 Viewing Volume에 걸쳐있다면? Primitive를 재구성해야 한다.

(2) Line Clipping GL_LINESGL_LINE_STRIPGL_LINE_LOOP과 같은 선분은 Line Clipping가 적용된다. 각 선분은 다음 과정을 거쳐 Cliping되거나, 새로운 Primitive로 재구성되거나, Cliping되지 않는다. 어떻게 교차점을 계산해서 새로운 Primitive로 구성할까?

Pasted image 20250612174808.png

목표는 Clipper를 거치면 교점이 출력되도록 하는 것이다.

Pasted image 20250612174858.png

\(x_{min}, x_{max}, y_{min}, y_{max}\)에 대해 같은 과정을 수행한다.

  1. \(x_{1}, x_{2}\) 또는 \(y_{1}, y_{2}\) 사이에 경계점이 있는가?
  2. 있다면, 그 사이에 교점이 만들어진다. 교점의 \(x, y\)중 하나는 반드시 \(min, max\) 값으로 확정된다.
  3. 나머지 점은 비례 관계를 사용하여 얻어낼 수 있다.

새롭게 만들어진 Vertex의 나머지 정보는 기존의 Vertex 정보에서 보간되어 채워진다. Color, UV map, ...

(3) Polygon Clipping GL_TRIANGLESGL_TRIANGLE_STRIPGL_TRIANGLE_FAN과 같은 도형은 Polygon Clipping가 적용된다.

Pasted image 20250612175300.png

총 4개의 경계면에 따라 순차적으로 다음 과정을 거쳐 Cliping을 수행한다.

  1. Primitive의 연속된 두 정점 \(v_{i}, v_{i+1}\)에 대해 다음을 수행한다.
    1. Inside → Inside : 끝점을 출력 리스트에 추가한다.
      • 시작점은 이미 전 단계에서 추가되었기 때문이다.
    2. Inside → Outside : 교차점을 출력 리스트에 추가한다.
      • Line Cliping 방법으로 교차점을 계산한다.
    3. Outside → Outside : 추가하지 않는다.
    4. Outside → Inside : 교차점과 끝점을 모두 추가한다.
      • Line Cliping 방법으로 교차점을 계산한다.

이후 출력 리스트에 있는 Vertex를 이어서 새로운 Primitive를 구성하면 끝이다.