Open Graphics Library 10
1. 폴리곤 래스터화 (Polygon Rasterization)
- 목적: 초기 래스터 시스템은 사용자가 채워진 다각형을 표시할 수 있게 함.
- 특징: 라인 래스터화와 달리 다각형 래스터화에는 여러 알고리즘이 사용되며, 구현 아키텍처에 따라 선택이 달라짐.
1.1 Inside-Outside Test
- Odd-Even Test (홀짝 테스트):
- 점에서 시작한 선이 다각형의 변과 홀수번 교차하면 내부.
- 짝수번 교차하면 외부.
- 구현: 스캔 라인(scanline)을 통해 각 픽셀에서 다각형 변과의 교차 횟수를 계산.
- 홀수: 내부
- 짝수: 외부
1.2 Flood-Fill Algorithm
- 단계:
- 경계선 채우기: Bresenham 알고리즘으로 다각형의 경계선을 따라 채움.
- 내부 채우기: 경계선 내부를 순차적으로 채움.
- 시작 픽셀에서 북, 남, 동, 서 방향으로 연결된 픽셀을 반복적으로 채움. - Pseudo-code:
1 2 3 4 5 6 7 8 9
function floodFill(x, y) { if (readPixel(x, y) == WHITE) { writePixel(x, y, BLACK); floodFill(x-1, y); floodFill(x+1, y); floodFill(x, y-1); floodFill(x, y+1); } }
- 시작 픽셀에서 북, 남, 동, 서 방향으로 연결된 픽셀을 반복적으로 채움. - Pseudo-code:
1.3 Scan-Line Fill Algorithm
- 방법:
- 화면 아래부터 한 줄씩 스캔 라인을 올리며 다각형 변과의 교차점을 계산.
- 홀수번째 교차점부터 짝수번째 교차점 직전까지를 색칠.
- Pseudo-code:
1 2 3 4 5
for (each scanline L) { Find intersections of L with all edges of P; Sort the intersections by increasing x-value; Fill pixels between all pairs of intersections; }
- 특이 케이스 처리:
- 수평선과 교차하거나 꼭짓점이 스캔 라인 위에 있을 때 교차점 제외.
1.4 성능 최적화
- Active Edge List (AEL):
- 각 스캔 라인의 교차 정보를 저장.
- edge의 x값 업데이트. (x += 1/m)
- 매번 x값 기준으로 정렬.
- 이전 스캔 라인의 계산 결과를 활용하여 중복 계산 방지.
2. 안티 앨리어싱 (Anti-Aliasing)
- 필요성: 래스터화된 경계선이 계단 모양으로 보이는 현상(aliasing)을 완화.
- 방법:
- Area Averaging (영역 평균화):
- 픽셀이 차지하는 영역 비율에 따라 색상을 혼합.
- 장점: 자연스럽고 부드러운 경계.
- 단점: 계산 복잡성.
- Point Sampling (포인트 샘플링):
- 픽셀의 한 지점을 샘플링하여 전체 픽셀 색상을 결정.
- 단순하지만 aliasing 문제가 발생.
- Super Sampling (슈퍼 샘플링):
- 픽셀을 고해상도로 렌더링 후 다운샘플링.
- 장점: 경계선이 부드러움.
- 단점: 계산 비용이 높음.
- Area Averaging (영역 평균화):
OpenGL에서의 구현
- 함수:
glHint()
를 사용하여 최적 품질 지정.glEnable(GL_BLEND)
로 색상 혼합 활성화.
예시 및 활용
- Flood-Fill Algorithm: 단색으로 채워진 다각형을 렌더링할 때 활용.
- Scan-Line Algorithm: 복잡한 다각형을 효율적으로 채우는 데 유용.
Anti-Aliasing: 고품질 그래픽스 렌더링.
3. 색상 모델 (RGB Color Model)
- RGB 모델:
- 색상은 기본 색상(빨강, 초록, 파랑)의 강도를 합산하여 표현.
- 각 강도는 일반적으로 0~1 사이의 값.
- 색상은 (r, g, b)로 표시되며, 이는 각각의 기본 색상의 강도를 나타냄.
- 색상 큐브: RGB 모델의 색 공간은 큐브 형태로 시각화 가능.
- 화면 디스플레이:
- CRT 모니터는 픽셀마다 RGB 형광 물질로 구성.
- 픽셀의 색상은 RGB 강도로 결정.
4. 조명과 음영 (Lighting and Shading)
- 조명(Lighting): 물체 표면의 정점에서 빛 세기를 계산.
- 음영(Shading): 조명을 통해 계산된 정점 색상을 사용해 물체 표면에 색상을 채움.
- 조명 모델: 빛과 물체 간의 상호작용을 설명하는 모델.
- 지역 조명 모델(Local Illumination Model): 직접 반사된 빛만 고려.
- 전역 조명 모델(Global Illumination Model): 물체 간의 빛 반사까지 고려.
광원 유형 (Light Sources)
- 주변광 (Ambient Light):
- 장면 전체에 균일한 조명 제공.
- 색상 강도는 \( I_a = (I_{ar}, I_{ag}, I_{ab}) \).
- 점광원 (Point Light Source):
- 공간의 특정 지점에서 모든 방향으로 빛 방출.
- 거리에 따라 빛의 세기 감소.
- 무한 광원 (Directional Light):
- 특정 방향에서 오는 빛을 표현.
- 태양광과 같은 예.
- 거리에 상관 없는 빛의 세기.
- 스포트라이트 (Spotlight):
- 제한된 각도로 빛을 방출.
- 원뿔 형태로 빛의 방향과 범위를 정의.
5. 퐁 조명 모델 (Phong Lighting Model)
- 구성 요소:
- 주변 반사 (Ambient Reflection):
- 모든 표면에서 동일한 강도로 반사.
- 계산: \( I_a = k_a L_a \) (반사 계수 \( k_a \)).
- 확산 반사 (Diffuse Reflection):
- 표면이 빛을 모든 방향으로 고르게 반사.
- 강도는 법선 벡터(N)와 광원 벡터(L) 간의 각도 \( \theta \)에 따라 결정.
- 계산: \( I_d = k_d L_d \cos \theta \).
- 정반사 (Specular Reflection):
- 매끄러운 표면에서 특정 방향으로 반사.
- 강도는 뷰어 방향과 반사 벡터 간 각도 \( \phi \)에 비례.
- 계산: \( I_s = k_s L_s \cos^n (\phi) \) (광택 계수 \( n \)).
- 주변 반사 (Ambient Reflection):
- 빛의 세기: 각 광원의 주변, 확산, 정반사 강도를 합산.
- \( I = I_a + I_d + I_s \).
거리 감쇠 (Distance Attenuation)
- 거리 효과: 빛의 세기는 거리 \( d \)에 따라 감소.
- 감쇠 함수: \( I = \frac{1}{a + b \cdot d + c \cdot d^2} \)
- \( a, b, c \): 감쇠 계수.
- \( a \): 기본 밝기.
- \( b \): 선형 감소.
- \( c \): 제곱 감소.
- 감쇠 함수: \( I = \frac{1}{a + b \cdot d + c \cdot d^2} \)
응용 및 예제
- 확산 반사 계산: \( I_d = k_d L_d \cos \theta \)를 사용해 각도에 따른 빛의 세기 계산.
- 정반사 계산: \( I_s = k_s L_s \cos^n (\phi) \)를 사용해 하이라이트 효과 구현.
- 거리 감쇠: 빛의 세기를 거리와 계수에 따라 감소시켜 사실적인 효과 추가.
This post is licensed under CC BY 4.0 by the author.