강의 내용 ( 두 번째 )

52
강강 강강 ( 강 강강 ) • 강강 강강 강강 (9 강 17 강 ) – 7.5, 7.6, 7.7 강 (320 강강강 – 334 강강강 ) • 강강 : 9 강 24 강 – Reading Assignment • 강강

Upload: delano

Post on 05-Jan-2016

88 views

Category:

Documents


0 download

DESCRIPTION

강의 내용 ( 두 번째 ). 오늘 강의 내용 (9 월 17 일 ) 7.5, 7.6, 7.7 절 (320 페이지 – 334 페이지 ) 예습 : 9 월 24 일 Reading Assignment 숙제. 7.5 다른 기본 요소의 절단. 7.5.1 한정 다각형. 한정 다각형 (bounding box) 혹은 범위 (extent) 한정 사각형은 다각형을 포함하고 윈도우에 정렬된 가장 작은 사각형임 . 한정 사각형을 이용하면 절단의 계산량을 줄일 수 있다. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 강의 내용 ( 두 번째 )

강의 내용 ( 두 번째 )

• 오늘 강의 내용 (9 월 17 일 )– 7.5, 7.6, 7.7 절 (320 페이지 – 334

페이지 )• 예습 : 9 월 24 일

– Reading Assignment

• 숙제

Page 2: 강의 내용 ( 두 번째 )

7.5 다른 기본 요소의 절단

Page 3: 강의 내용 ( 두 번째 )

7.5.1 한정 다각형• 한정 다각형 (bounding box) 혹은 범위

(extent)• 한정 사각형은 다각형을 포함하고 윈도우에

정렬된 가장 작은 사각형임 .• 한정 사각형을 이용하면 절단의 계산량을

줄일 수 있다 .

Page 4: 강의 내용 ( 두 번째 )

그림 7.18 다각형 , 한정 다각형 , 절단 윈도우

Page 5: 강의 내용 ( 두 번째 )

그림 7.19 한정 사각형으로 절단한정 다각형의 y 최소값이 윈도우의 윗쪽에 있기 때문에 절단 과정을 시행하지 않고도 절단 가능

한정 다각형이 걸쳐 있는 경우에만 모든 변들을 사용하여 자세한 절단 과정을 수행한다 .

Page 6: 강의 내용 ( 두 번째 )

7.5.2 곡선 , 곡면 , 문자열

그림 7.20 곡선 절단

Page 7: 강의 내용 ( 두 번째 )

7.5.2 곡선 , 곡면 , 문자열

• 2 차 곡선과 같은 단순한 곡선과의 교차점 : 직선보다는 다소 비용이 더 들어감

• 나선과 같은 복잡한 곡선과의 교차점 : 수치적 해법을 사용 해야하고 , 교차점의 개수를 알 수 없는 경우도 많다

• 곡선을 선분으로 근사하고 , 곡면을 평면 다각형으로 근사할 경우 위와 같은 문제를 피할 수 있음 .

Page 8: 강의 내용 ( 두 번째 )

7.5.2 곡선 , 곡면 , 문자열

• 문자열의 경우 두 가지 처리 방식이 있다

-비트 패턴 , 기하학적 객체

• 비트 패턴인 경우

-기하학적 처리 없이 하드웨어의 의하여 직접 렌더링

- 절단은 frame buffer 에서 처리 .

• 기하학적 객체인 경우

• OpenGL API 는 위의 두 가지 모드를 지원함 .

Page 9: 강의 내용 ( 두 번째 )

7.5.3 프레임 버퍼에서 절단• 객체가 투영되고 , 화면 좌표로 전환된

후까지 절단이 연기되는 경우 . • 화소의 블록 같은 raster 객체에 대해서

필요하다 . • 정점이 프레임 버퍼에 도달하기 전에

기하학적 객체를 전달하는 것이 보통 낫다 .

Page 10: 강의 내용 ( 두 번째 )

7.6 삼차원에서의 절단• 한정 영역이 아닌 한정 공간 (bound volum

e) 에 대하여 절단함 .• 2 차원 절단 알고리즘 ( Cohen-Sutherland,

Liang-Barsky, Sutherland-Hodgeman) 을 3차원으로 쉽게 확장할 수 있다 .

Page 11: 강의 내용 ( 두 번째 )

그림 7.21 직육면체에 대한 삼차원 절단

Page 12: 강의 내용 ( 두 번째 )

그림 7.22 삼차원에서 Cohen-Sutherland 영역

2 차원에서 4 비트 부호를 3 차원에서 6 비트로 확장한다 .

Page 13: 강의 내용 ( 두 번째 )

그림 7.23 평면 - 직선교차

2 차원 : 직선에 대하여 직선을 절단 . 교차점 계산

3 차원 : 면에 대해서 직선과 면을 절단 . 교차점 계산이 역시 필요

Page 14: 강의 내용 ( 두 번째 )

)(

)(

0))((

)1()(

12

10

0

21

PPn

PPn

PPn

PPP

교차점 계산은 6 번의 곱셈과 1 번의 나눗셈으로 구성된다 . 그러나 표준 관측 공간을 살펴 보면 한 번의 나눗셈으로 줄일 수 있다 .

Page 15: 강의 내용 ( 두 번째 )

그림 7.24 직교 관측에 대한 절단

Page 16: 강의 내용 ( 두 번째 )

그림 7.25 경사 관측에 대한 절단

Page 17: 강의 내용 ( 두 번째 )

그림 7.26 밀림에 의한 관측 공간의 왜곡

• 투영에 관한 한 , 바로 경사 변환을 수행하는 것이나 경사 변환을 밀림 변환과 직교 투영으로 대체하는 것이나 같은 양의 계산이 필요하다 .

•그러나 , 절단이 같이 고려될 때 , 직육면체에 대하여 절단하는 것이 ( 교차점 계산 ) 매우 유리하므로 두번째 접근 방식이 유리하다 .

•투시 투영에 대해서도 같은 논의를 할 수 있다 .

Page 18: 강의 내용 ( 두 번째 )

7.7 은면 제거• 정점들에 대한 기하학적 변환되고 정의한

객체가 조립된 후에 절단이 되면 , 투영 후에 화면상에 나타날 기하학적 개체들의 집합 ( 점 , 선분 , 다각형 ) 이 남게 된다 .

• 곡면은 다각형을 세분화한 것이기 때문에 다각형에 대한 은면 제거 방법을 논의하는 것은 곡면에 대한 은면 제게 방법으로 사용할 수 있다 .

Page 19: 강의 내용 ( 두 번째 )

7.7.1 객체 공간과 영상공간 접근• Object space 와 image space• K 개의 불투명하고 평평한 삼차원 다각형으로 구성된

장면을 가정• 객체들을 한 쌍씩 고려할 때 , 두 다각형 A 와 B 를

생각하자 . ( 그림 7.27 참조 )– A 가 B 를 카메라로부터 완전히 가린다 ; A 만 나타난다 .– B 가 A 를 가린다 ; B 만 나타난다 .– A 와 B 모두 완전히 보인다 ; A 와 B 모두 나타난다 .– A 와 B 가 부분적으로 가린다 ; 각 다각형에 대하여 보이는 부분을

계산해야 한다 .

• 계산 복잡도는 – 상대적으로 적은 수의 다각형을 가진 장면에 잘 동작함 .

)( 2kO

Page 20: 강의 내용 ( 두 번째 )

그림 7.27 두 다각형

(a) B 가 A 를 부분적으로 가린다(b) A 가 B 를 부분적으로 가린다(c) A 와 B 모두 보인다 .; A 와 B 모두 나타난다 .(d) B 가 A 를 완전히 가린다 .

Page 21: 강의 내용 ( 두 번째 )

• 관측과 광선 (ray) 투사 모형을 따른다 .

-광선은 투영 중심을 떠나서 화소를 지난다 .

-그림 7.28 참조

- k 개 다각형에 의하여 결정되는 평면들에서 광선이 다각형을 지나는지를 결정하고 ,

- 광선들에 대해서 투영 중심에서 가장 가까운 교차점을 찾는다 . 교차점에서 다각형의 음영을 계산하여 색칠한다 .

• 화면에 대해서 , 위의 연산을 nmk 번 실행함 .

따라서 계산 복잡도는 임 .

• 영상 공간법이 객체 공간법 보다는 우수함 .

mn

)(k

Page 22: 강의 내용 ( 두 번째 )

그림 7.28 영상공간 은면 제거

Page 23: 강의 내용 ( 두 번째 )

7.7.2 후면 제거• Back face culling• 은면 제거 알고리즘을 적용하기 전에

모든 후향 다각형형을 제거함으로써 은면 작업을 줄일 수 있다 . ( 약 50% 가량 )

Page 24: 강의 내용 ( 두 번째 )

후면선택 (Backface culling)

Page 25: 강의 내용 ( 두 번째 )

그림 7.29 후면 검사V 는 카메라의 방향

N 은 법선

Θ 는 법선과 관측자 사이각

9090 경우에 이 다각형은 전방을 향한다 .

그렇치 않은 경우에는 후방을 향한다 .

Page 26: 강의 내용 ( 두 번째 )

9090 0vn

전면 (front face 인 경우 )

정규화 장치 좌표계로 변환 후에는 이 계산은 더욱 단순화 된다 .

0

C

B

A

n0 DCzByAx

평면 방정식

카메라 방향 )1,1,0,0(v

Cvn

C 가 양수이면 전면 , 음수이면 후면임 .

Cvn 이므로

Page 27: 강의 내용 ( 두 번째 )

7.7.3 z- 버퍼 알고리즘 (1)

• 가장 광범위하게 사용되는 은면 제거 알고리즘• H/W 혹은 S/W 로 구현하기 쉽고 , 파이프라인 구조와 호환되는 장점

• 알고리즘은 영상공간 방식이지만 , 화소가 아닌 다각형에 대하여 알고리즘이 반복 수행된다 .

• 7.9 절에서 논의되는 주사변환 처리의 일부분으로 간주될 수 있다 .

• 프레임 버퍼 (Frame Buffer) 와 같은 크기의 깊이(depth) 를 저장하는 buffer(z-buffer) 가 필요하다 .

Page 28: 강의 내용 ( 두 번째 )

7.7.3 z- 버퍼 알고리즘 (2)

• 광선과 화소의 교차점에 대하여 음영 모델을 사용하여 색을 계산한다 .

• 이 점이 보이는지 아닌지를 검사해야 한다 . 광선에 따라 가장 가까운 교차점이라면 이 점은 보일 것이다 .– 그림 7.30 참조– B 를 래스터화 한다면 그것의 거리 Z2 가 다각형 A

의 거리 Z1 보다 짧기 때문에 화면에 나타난다 . 반대로 A 를 래스터화 한다면 화면에 나타나지 않는다 .

Page 29: 강의 내용 ( 두 번째 )

그림 7.30 z- 버퍼 알고리즘

Page 30: 강의 내용 ( 두 번째 )

7.7.3 z- 버퍼 알고리즘 (3)

• 깊이 버퍼는 최대 거리로 초기화된다 . • 프레임 버퍼는 배경색으로 초기화 된다 .• 다각형 단위로 하나씩 래스터화 된다 .• 광선과 다각형과의 교차점에 대응하는 다각형의 점에

대하여 투영의 중심으로부터 거리를 계산할 수 있다 . 이 거리를 dl 점에 대응하는 z-buffer 값과 비교한다 .– 이 거리가 z-buffer 값보다 크면 , 이 점은 보이지 않게 처리됨– 이 거리가 z-buffer 값보다 작으면 , z-buffer 의 거리 값을 갱신하고 , 프레임 버퍼에 대응하는 위치의 점에 대하여 계산된 음영값을 저장한다 .

– Foley 책의 그림 설명

Page 31: 강의 내용 ( 두 번째 )

Z- 버퍼 .

(a) 비어있는 z-buffer 에 상수 z 값을 갖는 다각형 첨가

(b) 첫번째 다각형과 교차하는 다른 다각형 첨가

Page 32: 강의 내용 ( 두 번째 )

Depth Coherence( 깊이 응집성 )• 7.9 절에 설명할 주사선별로 래스터화하는

방식으로 다각형을 래스터화한다고 가정한다 .

C

ByAxDz

DCzByAx

0

• z1 값이 이미 계산되어 주어졌다고 하면 , (x+Δx,y)에서의 z 값인 z2 는 z1 의 값에 1 번의 덧셈으로 구할 수 있다 . 물론 -A/C 값은 한번은 계산되어야 한다 .

)(12 xC

Azz

Page 33: 강의 내용 ( 두 번째 )

그림 7.31 증분적 z- 버퍼 알고리즘

Page 34: 강의 내용 ( 두 번째 )

7.7.4 깊이 정렬과 화가 알고리즘• Depth Sort Algorithm, Painter’s Algorithm• 객체공간 접근 방법• 깊이 정렬 알고리즘

1. 모든 다각형을 그들의 최소 ( 관찰자로부터 가장 먼 ) z 좌표에 따라 정렬한다 .

2. 정렬시 다각형의 z 경계 상자가 겹칠 때 야기되는 모호함을 해결하기 위해 필요하다면 다각형을 분할한다 .

3. 최소 z 좌표의 오름차순으로 (즉 , 뒤에서 앞으로 ) 각 다각형을 주사한다 .

• 화가 알고리즘은 각 다각형이 일정한 z값을 갖는 경우에 사용될 수 있는 방법으로 깊이 정렬 알고리즘의 단순한 형태이다 .

Page 35: 강의 내용 ( 두 번째 )

그림 7.32 화가 알고리즘

유화 화가가 장면을 그리는 방법과 유사하다 . 화가는 가장 멀리 있는 다각형을 전부 그리고 , 관측자에게 보이지 않는 뒤쪽 다각형의 부분 위에 덧칠하는 방법으로 앞쪽의 다각형을 칠한다 .

전향 렌더링 (back-to-front rendering)

Page 36: 강의 내용 ( 두 번째 )

그림 7.33 저장된 다각형 z 범위

Page 37: 강의 내용 ( 두 번째 )

그림 7.34 x 와 y 범위에서 겹침에 대한 검사

(a) 겹치지 않는 x 범위

(b) 겹치지 않는 y 범위

Page 38: 강의 내용 ( 두 번째 )

그림 7.35 겹친 범위를 가진 다각형

Page 39: 강의 내용 ( 두 번째 )

• 다각형 P 를 주사 변환하기 전에 다음과 같은 검사를 실시한다 . P 의 z- 경계상자와 겹치는 z- 경계 상자를 가진 모든 다각형 Q 를 검사하여 , P 가 Q 를 가릴 수 없고 따라서 , Q 를 그리기 전에 P 를 그릴 수 있음을 증명해야 한다 .

• 5 가지 검사를 차례로 수행하는 데 , 이 중 한가지라도 통과하면 P 가 Q 를 가릴 수 없음을 증명하는 것이 된다 .

1. 다각형들의 x- 경계상자가 겹치지 않는가 ?

2. 다각형들의 y- 경계상자가 겹치지 않는가 ?

3. Q 평면의 뒤쪽에 P 가 완전히 놓이는가 ?

4. P 의 평면의 앞쪽에 Q 가 완전히 놓이는가 ?

5. (x,y) 평면으로의 다각형들의 투영이 서로 겹치지 않는가 ?

★ Foley 책 참조

Page 40: 강의 내용 ( 두 번째 )

• 5 가지 검사가 모두 실패하면 우리는 P 가 Q 를 가린다고 가정하고 거꾸로 Q 가 P 이전에 주사 변환할 수 있는지를 검사한다 . 단계 1,2, 5 는 반복 검사할 필요가 없다

3’ P 평면의 뒤쪽에 Q 가 완전히 놓이는가 ?

4’ Q 의 평면의 앞쪽에 P 가 완전히 놓이는가 ?

• 그림 7.36 과 그림 3.37 의 경우에는 위의 알고리즘으로도 불가능하다 . 다각형 분할이 요구됨 .

Page 41: 강의 내용 ( 두 번째 )

그림 7.36 순환적 겹침

Page 42: 강의 내용 ( 두 번째 )

그림 7.37 관통하는 다각형

Page 43: 강의 내용 ( 두 번째 )

7.7.5 주사선 알고리즘•파이프라인 하드웨어가 지배적인 파라다임이 되기 전에는 주사선 방법은 가장 효율적인 은면 제거 알고리즘

• 다각형 주사변환과 은면 제거 알고리즘의 결합한 형태

• 그림 7.38 의 설명

Page 44: 강의 내용 ( 두 번째 )

그림 7.38 주사선 알고리즘 (1)

주사선 i : 다각형 A 의 변 a 에서 교차 . 한 개의 다각형과의 교차로 깊이 계산이 불필요함 . 변 b 와의 교차 이후에는 배경색으로 화소를 칠한다 . 다각형 B 의 변 c 와의 교차 . 한 개의 다각형이므로 깊이 계산이 불필요 . 변 d 와의 교차까지 변함이 없음

Page 45: 강의 내용 ( 두 번째 )

그림 7.38 주사선 알고리즘 (2)

주사선 j : 다각형 A 의 변 a 에서 교차 . 한 개의 다각형과의 교차로 깊이 계산이 불필요함 . 다각형 B 의 변 c 와의 교차하면 두개의 다각형과의 교차이므로 변 d를 만날 때까지 깊이를 계산하여야 한다 .

Page 46: 강의 내용 ( 두 번째 )

7.8 주사 변환•래스터화 : 기하학적 개체의 명시로부터

프레임 버퍼에서 화소의 설정• 가정

– 선분과 다각형만 고려함 .– 각 기본 요소는 화면에 나타날 수 있도록

이미 절단되어 있음 .– 모든 정점들은 2 차원으로 투영되었고 ,

화면 좌표계에서 작업함 .

Page 47: 강의 내용 ( 두 번째 )

Write_pixel(int ix, int iy, int value);

value : index mode 에서 index, RGB mode 에서는 32 bit 수 ( 화소값 )

ix, iy : 정수값

Page 48: 강의 내용 ( 두 번째 )

그림 7.39 윈도우 좌표계에서의 선분

Page 49: 강의 내용 ( 두 번째 )

DDA(Digital Differential Analyzer) 알고리즘

그림 7.40 DDA 알고리즘에 의해 생성된 화소

Page 50: 강의 내용 ( 두 번째 )

DDA(Digital Differential Analyzer) 알고리즘

10

12

12

m

x

y

xx

yym

my

xmy

m 이 1 보다 큰 경우는 대칭성을 이용

이므로x 1m 이 부동 소숫점이므로 반올림이 필요하다 .

for (ix=x1, ix<=x2, ix++)

{ y=+m;

write_pixel(x, round(y), line_color);

}

Page 51: 강의 내용 ( 두 번째 )

그림 7.41 기울기가 큰 직선과 작은 직선에 의해 생성된 화소들

Page 52: 강의 내용 ( 두 번째 )

그림 7.42 수정된 DDA 알고리즘에 의해 생성된 화소