공부일지

[컴퓨터 그래픽스]Cohen-Sutherland 선분 클리핑 본문

Computer/공부정리

[컴퓨터 그래픽스]Cohen-Sutherland 선분 클리핑

이르리의 공부일지 2025. 5. 3. 15:09

Cohen-Sutherland 선분 클리핑

 

I. 전제

끝점의 영역코드
b3 |b2 |b1 |b0
상 하 우 좌

b0 = {1 if x < xwmin
         {0 if x >= xwmax

b1 = {1 if x > xwmax
         {0 if x <= xwmax

b2 = {1 if y < ywmin
         {0 if y >= ywmax

b3 = {1 if y > ywmax
        {0 if y <= ywmax

II. 조건
조건1. rc1 or rc2 = 0
=> 둘 다 0인 부분(안)에 있어야 0 나옴
ex. 0000 안에 두 점이 있는 선분


조건2. rc1 and rc2 =/= 0
=> 둘 다 0 아닌 부분(밖)에 있어야 0 아니라고 나옴
ex. 1000, 0001 연결된 선분 


조건3. (rc1 = 0, rc2 =/= 0) 또는 (rc1 =/= 0, rc2 = 0)
=> 한쪽은 0인 곳(안)에, 한쪽은 0 아닌 곳(밖)에 있음
ex.  1000, 0000 연결된 선


조건4. rc1 =/= 0, rc2 =/= 0, (rc1 and rc2) = 0
=> 둘 다 0 아닌 곳(밖)에 있지만, 0인 곳에 거쳐 있다.
* 영역코드만으로 판단할 수 없음,
교차하는 경계를 선택하여 클리핑한 후 다시 처리(반복을 통한 처리 필요)
ex. 0001, 0100 연결된 선분


영역코드들(0000 상하우좌, 0상 0하 0우 0 순)
1001 | 1000 | 1010
0001 | 0000 | 0010
0101 | 0100 | 0110

조건 1: 다 그려야 함
조건 2: 안 그려도 됨
조건 3, 4: 거쳐있는 부분을 클리핑해서 재처리 필요


III. 선분과 클리핑 경계 교점 계산
* 핵심: 선분과 기울기
1. 수직 경계와의 교점
ex.좌측 경계
왼쪽 밖: (xs, ys)
오른쪽 경계 안: (xe, ye)

x = xwmin 또는 xwmax
=> y = ys + m(x - xs)
좌측 경계이면 x값에 xwmin 대입
우측 경계이면 x값에 xwmax 대입

2. 수평 경계와의 교점
ex. 아래쪽 경계 
아래쪽 밖: (xs, ys)
위쪽 안쪽: (xe, ye)
=> x = xs + (y-ys)/m


IIII. 문제점
교차하는 경계가 여러 개일 경우 클리핑을 반복해야 함.
ex. 1001, 0100 연결된 선분
좌측경계부터 좌 -> 우 -> 하 -> 상 경계별로 클리핑해야함.
선분이 거치는 경계 개수 = 클리핑 횟수