1. 보간법
1) 무게중심 좌표
: 벡터 외적에 의해 무게중심 좌표를 구해서 보간 하는 방법이다. 상대적으로 많은 시간이 걸린다.
자세한 내용은 설명하지 않겠다.
2) 양방향 선형보간
: 이 방식을 적용한 결과는 벡터 외적에 의한 무게 중심 좌표를 적용한 결과와 완전히 동일하다. 그러나 이 방법은 상대적으로 빠르다는 장점이 있다.
V의 색을 구한다고 가정했을 경우, 우선 R과 P의 색을 보간하여 S의 색을 구한다. 그리고 R과 Q의 색을 보간해 T의 색을 구한다음, S와 T의 색을 보간해 V의 색을 구하는 방법이다.
2. GL의 그래픽 기본요소
: GL의 그래피기 기본요소는 점(GL_POINTS), 선(GL_LINES), 도형(GL_POLYGON) 등으로 구성된다. 기본 선분에 해당하는 GL_LINE 외에도 GL_LINE_STRIP, GL_LINE_LOOP 등의 선이 있으며, GL_POLYGON 외에도 GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_QUAD_STRIP 등의 도형이 있다.
V1 -> V8 순서대로 Vertex를 그리면 Type에 따라 표현되어 지는게 달라진다.
GL_LINES는 정점 쌍을 잇는 선분을 그려낸다. 만약 홀수개의 정점이 선언되면 마지막 정점은 무시된다.
GL_LINE_STRIP은 꺾은선(Polyline)을 그리기 위한것이다. n개의 정점이 선언되면 (n-1)개의 선분이 이어져 그려진다.
GL_LINE_LOOP은 GL_LINE_STRIP가 동일하지만 마지막 정점을 첫 정점과 이음으로써 하나의 루프를 형성한다.
GL_TRIANGLES는 삼각형을 그리기 위한 것으로 정점 수가 3의 배수가 아니라면 마지막 하나 또는 두 개의 정점은 무시된다.
GL_QUADS는 사각형을 그리기 위한 것으로 정점 수가 4의 배수가 아니라면 마지막 1~3개의 정점은 무시된다.
GL_POLYGON은 다각형을 그리기 위한 것으로 정점은 3개 이상이어야하고 3개 미만이면 아무것도 그리지 않는다.
GL은 다각형의 경우 세 가지 규칙이 필요하다.
1) 단순 다각형(Simple Polygon) 이어야 한다. 이는 명시된 순서대로 정점을 따라갔을 때 변끼리 교차하지 않아야 한다는 것이다.
(b)는 변끼리 교차하므로 비단순 다각형(Non-Simple Polygon) 이다.
2) 볼록 다각형(Convex Polygon) 이어야 한다.
3) 평면 다각형(Flat Polygon) 이어야 한다. 이는 3차원 공간에서 다각형을 구성하는 모든 정점이 동일 평면 위에 존재해야 한다는 것이다.
GL에서 제시된 정점이 이러한 3가지 조건 중 하나라도 만족시키지 못하면 프로그램 실행 결과는 예측할 수 없다.
GL_TRIANGLE_STRIP은 일련의 삼각형을 그리기 위한 것이다. 명시된 정점 순서에 오른손 법칙을 가하면 법선 벡터의 방향이 결정된다. 순서대로 정점을 명시하면 V1-V2-V3, V3-V2-V4, V3-V4-V5등의 정점 순서에 의해 삼각형이 정의 된다.
GL_TRIANGLE_FAN은 첫 정점을 중심으로 나머지 삼각형이 이 중심을 공유하는 형태다.
GL_QUAD_STRIP은 사각형을 그리기 위한것으로 사각형의 정점 순서는 V1-V2-V4-V3, V3-V4-V6-V5 등의 순서로 정의된다.
void glPointSize(GLfloat size);
void glLineWidth(GLfloat width);
void glLineStipple(GLint factor, GLushort pattern);
void glPolygonStipple(const GLubyte *mask);
void glShadeModel(mode);
위 함수들은 기본 요소를 그릴 때 필요한 속성들을 지정하는 함수이다. 즉 크기, 색, 두께, 패턴(Stipple Pattern) 등 이다.
glLineStipple() 함수는 점선이나 쇄선을 그리기 위한 것이다. 파라미터 패턴은 16비트로 나타낸 것으로, 비트값 1은 해당 화소를 그림을, 비트값 0은 그리지 않음을 의미한다. factor는 이 패턴을 축소 또는 확대하기 위한 배율을 말한다.
다각형 내부를 패턴으로 채우기 위해서는 glPolygonStipple() 함수를 사용할 수 있다. 이 함수의 패턴 역시 glLineStipple() 함수와 유사하게 정의할 수 있지만 이 경우에는 2차원 패턴을 정의해야 한다.
3. 에일리어싱과 앤티 에일리어싱
: 에일리어싱은 래스터 그래픽 장비에서는 회피할 수 없는 문제로, 래스터 변환 단계에서 필연적으로 발생한다. 이는 무한히 섬세한 모양을 가진 실제 사물을 일정 화소 단위로 화면에 나타내야 하기 때문이다. 이러한 문제를 해소하기 위한 방법이 안티 에일리어싱 이다.
1) 슈퍼 샘플링
: 화소를 더 작은 단위로 분할해서 분할한 부분의 색깔을 더해서 평균값을 구하는 것이다. 그 평균값을 해당 화소값으로 정한다. 2*2 슈퍼 샘플링은 포인트 샘플링에 비해 4배의 계산 시간이 필요하다.
1- 포인트 샘플링
: 분할한 부분의 색깔을 뽑아 낼때 중심점을 기준으로 뽑아 내는것이 포인트 샘플링이다.
2- 지터에 의한 슈퍼 샘플링
: 분할한 부분의 색깔을 뽑아낼 위치를 랜덤으로 지정하는것이 지터에 의한 슈퍼 샘플링이다.
3- 영역 샘플링
: 화소 밝기를 면적에 비례하게 계산해서 결정하는 방법이다.
'영상 처리 프로그래밍' 카테고리의 다른 글
[컴퓨터 그래픽스] 텍스처(2) (0) | 2017.11.28 |
---|---|
[컴퓨터 그래픽스] 텍스처(1) (0) | 2017.11.28 |
[컴퓨터 그래픽스] 래스터 변환(1) (0) | 2017.11.27 |
[컴퓨터 그래픽스] 가시성 판단 (0) | 2017.11.23 |
[컴퓨터 그래픽스] 뷰 포트 변환 (0) | 2017.11.23 |