1 / 52

강의 내용 ( 두 번째 )

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

delano
Download Presentation

강의 내용 ( 두 번째 )

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 강의 내용(두 번째) • 오늘 강의 내용 (9월 17일) • 7.5, 7.6, 7.7절 (320 페이지 – 334 페이지) • 예습 : 9월 24일 • Reading Assignment • 숙제

  2. 7.5 다른 기본 요소의 절단

  3. 7.5.1 한정 다각형 • 한정 다각형(bounding box) 혹은 범위(extent) • 한정 사각형은 다각형을 포함하고 윈도우에 정렬된 가장 작은 사각형임. • 한정 사각형을 이용하면 절단의 계산량을 줄일 수 있다.

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

  5. 그림 7.19 한정 사각형으로 절단 한정 다각형의 y 최소값이 윈도우의 윗쪽에 있기 때문에 절단 과정을 시행하지 않고도 절단 가능 한정 다각형이 걸쳐 있는 경우에만 모든 변들을 사용하여 자세한 절단 과정을 수행한다.

  6. 7.5.2 곡선, 곡면, 문자열 그림 7.20 곡선 절단

  7. 7.5.2 곡선, 곡면, 문자열 • 2차 곡선과 같은 단순한 곡선과의 교차점: 직선보다는 다소 비용이 더 들어감 • 나선과 같은 복잡한 곡선과의 교차점 : 수치적 해법을 사용 해야하고, 교차점의 개수를 알 수 없는 경우도 많다 • 곡선을 선분으로 근사하고, 곡면을 평면 다각형으로 근사할 경우 위와 같은 문제를 피할 수 있음.

  8. 7.5.2 곡선, 곡면, 문자열 • 문자열의 경우 두 가지 처리 방식이 있다 • 비트 패턴, 기하학적 객체 • 비트 패턴인 경우 • 기하학적 처리 없이 하드웨어의 의하여 직접 렌더링 • 절단은 frame buffer에서 처리. • 기하학적 객체인 경우 • OpenGL API는 위의 두 가지 모드를 지원함.

  9. 7.5.3 프레임 버퍼에서 절단 • 객체가 투영되고, 화면 좌표로 전환된 후까지 절단이 연기되는 경우. • 화소의 블록 같은 raster 객체에 대해서 필요하다. • 정점이 프레임 버퍼에 도달하기 전에 기하학적 객체를 전달하는 것이 보통 낫다.

  10. 7.6 삼차원에서의 절단 • 한정 영역이 아닌 한정 공간(bound volume)에 대하여 절단함. • 2차원 절단 알고리즘( Cohen-Sutherland, Liang-Barsky, Sutherland-Hodgeman)을 3차원으로 쉽게 확장할 수 있다.

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

  12. 그림 7.22 삼차원에서 Cohen-Sutherland 영역 2차원에서 4 비트 부호를 3차원에서 6 비트로 확장한다.

  13. 그림 7.23 평면-직선교차 2차원 : 직선에 대하여 직선을 절단. 교차점 계산 3차원 : 면에 대해서 직선과 면을 절단. 교차점 계산이 역시 필요

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

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

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

  17. 그림 7.26 밀림에 의한 관측 공간의 왜곡 • 투영에 관한 한, 바로 경사 변환을 수행하는 것이나 경사 변환을 밀림 변환과 직교 투영으로 대체하는 것이나 같은 양의 계산이 필요하다. • 그러나, 절단이 같이 고려될 때, 직육면체에 대하여 절단하는 것이(교차점 계산) 매우 유리하므로 두번째 접근 방식이 유리하다. • 투시 투영에 대해서도 같은 논의를 할 수 있다.

  18. 7.7 은면 제거 • 정점들에 대한 기하학적 변환되고 정의한 객체가 조립된 후에 절단이 되면, 투영 후에 화면상에 나타날 기하학적 개체들의 집합(점,선분,다각형)이 남게 된다. • 곡면은 다각형을 세분화한 것이기 때문에 다각형에 대한 은면 제거 방법을 논의하는 것은 곡면에 대한 은면 제게 방법으로 사용할 수 있다.

  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가 부분적으로 가린다; 각 다각형에 대하여 보이는 부분을 계산해야 한다. • 계산 복잡도는 • 상대적으로 적은 수의 다각형을 가진 장면에 잘 동작함.

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

  21. 관측과 광선(ray)투사 모형을 따른다. • 광선은 투영 중심을 떠나서 화소를 지난다. • 그림 7.28 참조 • k개 다각형에 의하여 결정되는 평면들에서 광선이 다각형을 지나는지를 결정하고, • 광선들에 대해서 투영 중심에서 가장 가까운 교차점을 찾는다. 교차점에서 다각형의 음영을 계산하여 색칠한다. • 화면에 대해서, 위의 연산을 nmk 번 실행함. • 따라서 계산 복잡도는 임. • 영상 공간법이 객체 공간법 보다는 우수함.

  22. 그림 7.28 영상공간 은면 제거

  23. 7.7.2 후면 제거 • Back face culling • 은면 제거 알고리즘을 적용하기 전에 모든 후향 다각형형을 제거함으로써 은면 작업을 줄일 수 있다. (약 50% 가량)

  24. 후면선택(Backface culling)

  25. 그림 7.29 후면 검사 V 는 카메라의 방향 N 은 법선 Θ는 법선과 관측자 사이각 경우에 이 다각형은 전방을 향한다. 그렇치 않은 경우에는 후방을 향한다.

  26. 전면 (front face 인 경우 ) 정규화 장치 좌표계로 변환 후에는 이 계산은 더욱 단순화 된다. 카메라 방향 평면 방정식 이므로 C가 양수이면 전면, 음수이면 후면임.

  27. 7.7.3 z-버퍼 알고리즘(1) • 가장 광범위하게 사용되는 은면 제거 알고리즘 • H/W 혹은 S/W로 구현하기 쉽고, 파이프라인 구조와 호환되는 장점 • 알고리즘은 영상공간 방식이지만, 화소가 아닌 다각형에 대하여 알고리즘이 반복 수행된다. • 7.9절에서 논의되는 주사변환 처리의 일부분으로 간주될 수 있다. • 프레임 버퍼(Frame Buffer)와 같은 크기의 깊이(depth)를 저장하는 buffer(z-buffer)가 필요하다.

  28. 7.7.3 z-버퍼 알고리즘(2) • 광선과 화소의 교차점에 대하여 음영 모델을 사용하여 색을 계산한다. • 이 점이 보이는지 아닌지를 검사해야 한다. 광선에 따라 가장 가까운 교차점이라면 이 점은 보일 것이다. • 그림7.30 참조 • B를 래스터화 한다면 그것의 거리 Z2가 다각형 A의 거리 Z1 보다 짧기 때문에 화면에 나타난다. 반대로 A를 래스터화 한다면 화면에 나타나지 않는다.

  29. 그림 7.30 z-버퍼 알고리즘

  30. 7.7.3 z-버퍼 알고리즘(3) • 깊이 버퍼는 최대 거리로 초기화된다. • 프레임 버퍼는 배경색으로 초기화 된다. • 다각형 단위로 하나씩 래스터화 된다. • 광선과 다각형과의 교차점에 대응하는 다각형의 점에 대하여 투영의 중심으로부터 거리를 계산할 수 있다. 이 거리를 dl 점에 대응하는 z-buffer 값과 비교한다. • 이 거리가 z-buffer 값보다 크면, 이 점은 보이지 않게 처리됨 • 이 거리가 z-buffer 값보다 작으면, z-buffer 의 거리 값을 갱신하고, 프레임 버퍼에 대응하는 위치의 점에 대하여 계산된 음영값을 저장한다. • Foley 책의 그림 설명

  31. Z-버퍼. • 비어있는 z-buffer에 상수 z값을 갖는 다각형 첨가 • 첫번째 다각형과 교차하는 다른 다각형 첨가

  32. Depth Coherence(깊이 응집성) • 7.9절에 설명할 주사선별로 래스터화하는 방식으로 다각형을 래스터화한다고 가정한다. • z1 값이 이미 계산되어 주어졌다고 하면, (x+Δx,y)에서의 z 값인 z2 는 z1의 값에 1번의 덧셈으로 구할 수 있다. 물론 -A/C 값은 한번은 계산되어야 한다.

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

  34. 7.7.4 깊이 정렬과 화가 알고리즘 • Depth Sort Algorithm, Painter’s Algorithm • 객체공간 접근 방법 • 깊이 정렬 알고리즘 • 모든 다각형을 그들의 최소(관찰자로부터 가장 먼) z 좌표에 따라 정렬한다. • 정렬시 다각형의 z 경계 상자가 겹칠 때 야기되는 모호함을 해결하기 위해 필요하다면 다각형을 분할한다. • 최소 z 좌표의 오름차순으로 (즉, 뒤에서 앞으로) 각 다각형을 주사한다. • 화가 알고리즘은 각 다각형이 일정한 z값을 갖는 경우에 사용될 수 있는 방법으로 깊이 정렬 알고리즘의 단순한 형태이다 .

  35. 그림 7.32 화가 알고리즘 유화 화가가 장면을 그리는 방법과 유사하다. 화가는 가장 멀리 있는 다각형을 전부 그리고, 관측자에게 보이지 않는 뒤쪽 다각형의 부분 위에 덧칠하는 방법으로 앞쪽의 다각형을 칠한다. 전향 렌더링 (back-to-front rendering)

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

  37. 그림 7.34 x와 y 범위에서 겹침에 대한 검사 • 겹치지 않는 x 범위 • 겹치지 않는 y 범위

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

  39. 다각형 P를 주사 변환하기 전에 다음과 같은 검사를 실시한다. P의 z-경계상자와 겹치는 z-경계 상자를 가진 모든 다각형 Q를 검사하여, P가 Q를 가릴 수 없고 따라서, Q를 그리기 전에 P를 그릴 수 있음을 증명해야 한다. • 5가지 검사를 차례로 수행하는 데, 이 중 한가지라도 통과하면 P가 Q를 가릴 수 없음을 증명하는 것이 된다. • 다각형들의 x-경계상자가 겹치지 않는가? • 다각형들의 y-경계상자가 겹치지 않는가? • Q 평면의 뒤쪽에 P가 완전히 놓이는가? • P의 평면의 앞쪽에 Q가 완전히 놓이는가? • (x,y) 평면으로의 다각형들의 투영이 서로 겹치지 않는가? • ★ Foley 책 참조

  40. 5가지 검사가 모두 실패하면 우리는 P가 Q를 가린다고 가정하고 거꾸로 Q가 P이전에 주사 변환할 수 있는지를 검사한다. 단계 1,2, 5는 반복 검사할 필요가 없다 • 3’ P 평면의 뒤쪽에 Q가 완전히 놓이는가? • 4’ Q의 평면의 앞쪽에 P가 완전히 놓이는가? • 그림 7.36과 그림 3.37의 경우에는 위의 알고리즘으로도 불가능하다. 다각형 분할이 요구됨.

  41. 그림 7.36 순환적 겹침

  42. 그림 7.37 관통하는 다각형

  43. 7.7.5 주사선 알고리즘 • 파이프라인 하드웨어가 지배적인 파라다임이 되기 전에는 주사선 방법은 가장 효율적인 은면 제거 알고리즘 • 다각형 주사변환과 은면 제거 알고리즘의 결합한 형태 • 그림 7.38의 설명

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

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

  46. 7.8 주사 변환 • 래스터화 : 기하학적 개체의 명시로부터 프레임 버퍼에서 화소의 설정 • 가정 • 선분과 다각형만 고려함. • 각 기본 요소는 화면에 나타날 수 있도록 이미 절단되어 있음. • 모든 정점들은 2차원으로 투영되었고, 화면 좌표계에서 작업함.

  47. Write_pixel(int ix, int iy, int value); value : index mode에서 index, RGB mode에서는 32 bit 수 (화소값) ix, iy : 정수값

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

  49. DDA(Digital Differential Analyzer) 알고리즘 그림 7.40 DDA 알고리즘에 의해 생성된 화소

  50. DDA(Digital Differential Analyzer) 알고리즘 m이 1보다 큰 경우는 대칭성을 이용 m이 부동 소숫점이므로 반올림이 필요하다. for (ix=x1, ix<=x2, ix++) { y=+m; write_pixel(x, round(y), line_color); }

More Related