일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- queue
- directx
- priority_queue
- 통계학
- LineTracer
- Arduino
- 시스템프로그래밍
- Stack
- stl
- c++
- 아두이노 소스
- Deque
- html
- 컴퓨터 그래픽스
- map
- vector
- WinAPI
- arduino compiler
- Visual Micro
- 운영체제
- set
- Algorithm
- 아두이노 컴파일러
- 라인트레이서
- list
- 아두이노
- Array
- C언어
- 수광 소자
- 자료구조
- Today
- Total
Kim's Programming
래스터 변환과 2차원 윈도우 본문
래스터 방식 변환
래스터 변환
래스터 방식에서 객체의 변환을 할 때는 프레임버퍼 내의 사각형 모양에 해당하는 픽셀블록을 조작합니다. 픽셀블록들에 대해서 덧셉 곱셈같은 연산이 아니라 AND, OR 등 비트연산을 사용하여 픽셀블록들을 조작하여 변환시킵니다. 이러한 변환을 처리하는 래스터 함수들을 래스터연산 또는 RasterOp 라고 부릅니다. 또한 래스터 변환은 다른 위치로 옮기며 처리하는 과정이므로 bitBlt(Bit Block Transfer)라고도 불립니다.
래스터 변환
래스터 방식으로 표현된 객체 또는 프레임 버퍼내의 픽셀블록을 조작하여 변환하는 래스터연산(RasterOp)에서는 주로 COPY, OR, XOR, AND, ERASE, SET, CLEAR등의 비트 연산이 사용됩니다. 글자영역을 S, 커서 블록을 D라고 했을 때 2개가 겹치게 되면 흰색으로 보이게 됩니다. 이 블로그든 어디든 글자에 책갈피 커서를 글자에 대게 되면 흰색으로 보이게 됩니다.
또한 래스터방식에서의 회전은 어렵지만 수직으로 회전할 수는 있습니다.
- 90도 회전의 경우 : 각 행에서 픽셀의 순서를 반대로 하고, 행과 열을 바꾸면 90도 회전이 됩니다.
- 180도 회전의 경우 : 각 행에서 픽셀의 순서를 반대로 한 뒤, 각 열의 상하 순서를 바꾸어주면 변환이 됩니다.
뷰잉 파이프라인
객체의 생성부터 그림을 작성하고 일정 부분을 출력하기 까지의 과정을 뷰잉 파이프라인(Viewing Pipeline) 이라고 합니다.
개별 객체를 표현하기 위해서 사용되는 각자의 좌표계를 모델 좌표계(Model Space)라고 합니다. 이것들을 월드 좌표계로 보내서 모델좌표 각각을 모으는 것을 모델링 변환이라고 합니다.
월드 좌표계는 이들 모델 좌표계들이 그래픽 장면 전체를 위한 하나의 좌표계로 통합이 되며 이를 월드 좌표계라고 합니다.
그래픽 장면에서 윈도우 영역에 포함되지 않는 부분의 그림은 제거하여 처리해야하는데 이 과정을 클리핑(Clipping)이라고 합니다. 위의 그림이 그 과정을 하고 있습니다.
선 클리핑에서는 선분의 양 끝점의 좌표값으로부터 클리핑 여부를 판단합니다. 왼쪽에서 볼수 있듯이 안쪽에 있든 걸쳐있듯 완전히 밖에 있든 내부에 있는 지를 판단해야 합니다. 이와 같이 선과 윈도우 영
역의 교차여부를 판단하고 클리핑을 수행하기 위하여 사용하는 알고리즘 중에 가장 많이 사용되는 알고리즘은 Cohen-Sutherland 알고리즘입니다.
위 3가지로 나누고 나서 알고리즘을 수행하고 됩니다. Cohen-Sutherland 클리핑 알고리즘을 수행하게 됩니다.
- 선분의 양 끝점에 영역코드를 할당합니다. 만약 양 끝점의 영역코드가 모두 0000이면 이 선분은 윈도우 영역에 포함됩니다.(1번 경우)
- 선분의 양 끝점에 대한 영역코드 간에 AND 연산을 수행합니다. 연산결과가 0이 아니면 선분이 윈도우 영역 밖에 있으므로 이 선분은 제거합니다.(2번 경우)
- 위의 두 경우가 아니면 선분이 영역을 벗어나는지를 판단할 수 없습니다. 양 끝점의 영역코드에서 값이 서로 다른 영역비트를 찾아 해당하는 경계에서 수직 또는 수평 분할을 합니다. 선분의 양 끝점이 (x1,y1)과 (x2,y2)이고 윈도우의 각 방향 경계의 좌표값을 xL,xR,yB,yT이라고 했을 때 선분의 교차점을 다음과 같이 구하게 됩니다.
- 수직 경계에 걸치는 경우 또는 에 대해서
수직 경계에 걸치는 경우 또는 에 대해서 선분을 2개로 분할한 후, 분할의 기준이 된 윈도우 경계에서 밖의 부분은 버리고 경계 내부의 선분에 대하여 1단계부터 다시 수행하게됩니다.
영역 클리핑이 단순한 다각형인 경우에는 선 클리핑을 이용하여 다각형 클리핑을 수행하면 되지만위에 있는 도형의 경우(오목다각형)는 선클리핑으로 클리핑이 불가능합니다. 오목다각형을 클리핑 할 때는 Sutherland-Hodgeman 알고리즘을 사용하게 됩니다.
3-1. Sutherland-Hodgeman 알고리즘
Sutherland-Hodgeman 알고리즘은 다음과 같은 과정을 거치게됩니다.
1) 다각형의 각변에 대해서 경계와의 교차를 판단합니다. 다음 4개가지 경우에 따라서 꼭지점이 다각형에 포함이 되는지의 여부를 결정합니다.
1-1) 다각형의 변이 윈도우의 외부에서 내부로 향하는 경우, 교차점과 끝점을 포함합니다. (a)
1-2) 다각형의 변이 윈도우의 내부에 완전히 포함되어 있는 경우, 시작점은 이미 포함되어 있으므로 끝점만 포함 시킵니다.(b)
1-3) 다각형의 변이 윈도우의 내부에서 외부로 향하는 경우, 교차점만을 포함합니다.(c)
1-4) 다각형의 변이 윈도우 외부에 있는 경우 아무점도 포함하지 않습니다.(d)
2)다각형의 모든 변에 대하여 위의 절차를 마치면 새로운 다각형이 만들어 집니다. 이 다각형에 대하여 왼쪽, 위쪽, 오른쪽, 아래쪽, 경계에서 위의 절차를 반복합니다.
4. 텍스트 클리핑
텍스트 클리핑은 처리방식에 따라서 전체 텍스트 클리핑, 전체 문자 클리핑, 개별 문자 클리핑으로 나누어 집니다. 전체 텍스트 클리핑은 경계에 하나라도 걸리면 전체 텍스트를 삭제하게 됩니다(좌). 전체 문자 클리핑은 문자 하나에 대해서 걸리는 것이 있으면 그 문자 까지는 삭제를 하게됩니다(중). 개별 문자 클리핑은 경계에 글자가 걸리면 글자단위로 잘라서 그 글자의 잘린부분까지 출력을 합니다.
'Computer Theory > Computer Graphics' 카테고리의 다른 글
3차원 그래픽스 기하변환 (4) | 2016.01.24 |
---|---|
3차원 그래픽스 (0) | 2016.01.24 |
2차원 그래픽스의 동차좌표계 변환 (0) | 2016.01.23 |
2차원 그래픽스의 변환 (0) | 2016.01.23 |
2차원 그래픽스 문자와 색상 표현 (0) | 2016.01.23 |