일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- OpenGL
- 렌더링
- 셰이더
- 그래픽스기초
- 그래픽스
- c4d
- 컴퓨터 아키텍쳐
- MFC
- window programming
- denoising
- 윈도우 프로그래밍
- Geometry Modeling
- MFC 윈도우 프로그래밍
- 셰이더프로그래밍
- shader
- bezier curve
- Graphics
- shader programming
- 윈도우
- win32
- 핵심 API로 배우는 윈도우프로그래밍
- 베지에 곡선
- Mesh Processing
- 컴퓨터 구조
- modeling
- 윈도우 구조
- 윈도우프로그래밍
- 오픈지엘
- Win32 API
- 운영체제
- Today
- Total
오다기리 박의 알고리즘 노트
[OpenGL로 배우는 컴퓨터 그래픽스] Chapter 09. 래스터변환(Rasterization) 본문
Chapter 09. 래스터변환(Rasterization)
Section 01. 래스터변환
정점, 선분, 다각형 내부를 표현하기 위해 어떤 화소를 선택해야 하는지를 결정하는 작업
Section 02. 선분 래스터변환
선분의 기울기 > 1 : y 좌표를 1씩 증가시키면서 래스터변환
선분의 기울기 < 1 : x 좌표를 1씩 증가시키면서 래스터변환
교차점 계산
DDA(Digital Differential Analyzer) 알고리즘
다음 교차점의 y좌표 = 이전 교차점의 y좌표 + 기울기
브레스넘(Bresenham) 알고리즘 / 중점 알고리즘
장점 : 연산속도
화소 좌표
주소할당 방식
Section 03. 다각형 래스터변환
그래픽 수식 표현
Explicit Forms
y = 2x +4
Impicit Forms
f(x,y) = y - 2x - 4 =0
Parametric Representation
(t, 2t + 4) or (t^2 +1, 2(t^2 +1) + 4)
삼각형 래스터변환
2차원 평면에서 점와 점를 연결하는 직선을 음함수로 표현하면
어떤 화소가 삼각형 내부에 있다면 그 화소의 좌표를 각 선분의 음함수 식에 대입했을 때 양수가 되어야한다.주사선 채움(Scan Line Fill) 알고리즘
Scan Line과 다각형의 교차점을 계산한다.
홀수~짝수 구간만 칠한다. (1<=x<2, 3<=x<4)
예외
극대점(H,F,C) : 교차점 = 0 으로 간주. 극대점이 속한 화소는 칠해지지 않는다.
극소점(A,G) : 교차점 = 2 으로 간주. 극소점이 속한 화소는 칠해진다.
극대점이면서 극소점(B) : 1번 교차한 것으로 간주.
Scan line과 평행한 부분(DE) : 해당 선분이 없는 것으로 간주.
씨앗채움 알고리즘(Seed Fill Algorithm)
주사선 채움 알고리즘에 비해 오랜 실행시간이 필요
정점의 내외부 판정 방법 1
오목 볼록 판정
다각형의 모든 정점을 대상으로 그 정점이 어떤 선분의 오른쪽에 있는지 확인하거나,
이어지는 선분끼리 외적을 구하여 180도보다 크면 오목 다각형이다.
볼록 다각형이라면
다각형의 선분을 반시계 방향으로 따라가면서 그 정점이 선분의 왼쪽에 있으면 다각형 내부이다.
오목 다각형이라면
분할(Tessellation)하여 삼각형으로 분할한다.
정점의 내외부 판정 방법 2 (오목 볼록 무관하게)
홀수 규칙(Odd Parity Rule)
어떤 점에서 다각형 외부를 향해 직선을 그을 때 그 직선이 다각형 변과 홀수 번 교차하면 그 점은 다각형 내부
씨앗채움 알고리즘
어떤 화소 하나가 다각형 내부임이 확인되면 씨앗채움 알고리즘을 사용하여 다각형 내부를 채울 수 있다.
내부 화소를 씨앗으로 해서 해당 화소의 색을 인근으로 번져 나가게 하는 방법.
방식1 : 경계채움 알고리즘 (Boundary Fill Algorithm)
경계화소 색이 동일해야 한다.
방식2 : 홀수채움 알고리즘
경계화소 색이 서로 달라도 된다.
Section 04. 보간법
무게중심(barycentric coordinate)
외적이용
양선형보간 이용 (상대적으로 빠름)
Section 05. GL의 그래픽 기본요소
속성(Attributes)
void glPointSize(GLfloat size);
void glLineWidth(GLfloat width);
void glLineStipple(GLint factor, GLshotr pattern);
void glPolygonStipple(const GLubyte *mask);
void glShadeModel(mode);
Section 06. 비트맵과 포스트스크립트
비트맵 영상 : 비트맵 파일 형식으로 저장됨
포스트스크립트 영상 : 그래픽 메타파일 형태로 저장됨
그래픽 파일 형식
BMP(Bitmapped Picture)
MS 운영체제에서 기본적으로 사용하는 비트맵 파일로서 일반적으로 압축을 가하지 않은 파일
GIF(Graphic Interchange Format)
무손실 압축을 사용한 비트맵 파일로서 8비트 컬러 즉, 256컬러로 제한된다. 사진이나 스캔 영상 등 다양한 컬러를 지원해야 하는 영상에는 적합하지 않은 형식이다. 웹에서 자주 사용된다.
GIF 89a
애니메이션을 위한 파일 형식으로서 하나의 파일에 일련의 영상을 저장할 수 있다. Pinter, Premiere, Flash 등의 소프트웨어를 사용하여 만들 수 있다. 단순한 웹 애니메이션 정도에 유용하다.
PNG (Portable Network Graphics)
웹 표준단체인 W3C에서 추천하는 파일 형식으로서 무료 사용 제약이 없다.
JPEG(Joint Photographic Expert Group)
일종의 압축 기법. JPG, TIFF, EPS 등의 형식에 적용 가능하다. 24비트 컬러를 지원한다. 손실압축의 일종이기 때문에 파일 크기는 작지만 원래 영상을 완벽하게 복원하지는 못한다.
TIFF(Tagged Image File Format)
8비트, 24비트 컬러를 지원하는 형식으로서 JPEG뿐만 아니라 다른 압축방법도 수용한다.
PDF (Postscript Description File)
그려낼 물체를 PDL(Page Desciption Language) 라는 명령어로 정의한다.
이러한 명령어를 해독하여 렌더링을 가해야만 그림이 그려진다.
EPS(Extended PostScript), SWF(Shockwave Flash), WMF(Windows Meta File), SVG(Scaleable Vector Graphic), PICT(PICTure)
그래픽 메타파일 형식으로서 포스트스크립트, 비트맵, 텍스트를 동시에 저장할 수 있다.
그래픽 파일 저장 방식
비트맵 파일
최종 렌더링 결과인 그림 자체를 저장하는 방식
그패픽 메타파일
모델링 결과 정점 좌표와 렌더링 명령을 저장한 파일
그림 대신 해당 그림을 그려내기 위한 명령어를 저장한다.
저장된 명령어 파일을 읽어서 추가적으로 렌더링을 가해야만 그림이 그려진다.
Section 07. 에일리어싱과 안티에일리어싱
에일리어싱
무한 해상도를 지닌 사물을 유한 해상도를 가진 화면에 프로젝션 시키는 래스터변환 과정에서 언더샘플링이 일어난다.
해상도가 높아질 수록 화소 크기가 작아져 에일리어싱은 감소한다.
호가대하거나 좁은 간격에서 물체 모습이 자주 변할 경우(주파수가 높을 경우) 에일리어싱이 심해진다.
수퍼샘플링 (Super Sampling)
하나의 화소를 부분화소(subpixel)로 분할하여 화소밝기를 계산하되 최종적으로는 이를 평균하여 하나의 화소 단위로 뿌리는 방법
영역 샘플링 (Area Sampling)
화소 밝기를 면적에 비례하게 하는 방법
한 화소와 물체와의 교차면적을 계산해야 한다.
동일 가중치 샘플링(Unweighted Area Sampling)
피라미드 가중치 샘플링 (Pyramid-Weighted Area Sampling)
원뿔 가중치 샘플링(Cone-Weighted Area Sampling)
'컴퓨터 그래픽스 > OpenGL' 카테고리의 다른 글
[OpenGL로 배우는 컴퓨터 그래픽스] Chapter 11. 텍스쳐 (Texture) (0) | 2019.02.14 |
---|---|
[OpenGL로 배우는 컴퓨터 그래픽스] Chapter 10. 조명과 음영(Lighting and Shading) (0) | 2019.02.14 |
[OpenGL로 배우는 컴퓨터 그래픽스] Chapter 08. 가시성 판단 (Visibility Detection) (0) | 2019.02.14 |
[OpenGL로 배우는 컴퓨터 그래픽스] Chapter 07. 투상변환과 뷰포트변환 (0) | 2019.02.14 |
[OpenGL로 배우는 컴퓨터 그래픽스] Chapter 06. 모델변환과 시점변환 (0) | 2019.02.14 |