렌더기의 구현 최 수 미 smchoi@sejong.ac.kr http://www.sejong.ac.kr/~smchoi.

Slides:



Advertisements
Similar presentations
10-7 부동소수점 (Floating-Point) 계산  컴퓨터에서 숫자를 표기하는 방법  가수 (Fraction) : 부호화된 고정소수점 숫자 지수 (Exponent) : 소수점의 위치를 표시 ( 예 )10 진수 를 표기하면 Fraction Exponent.
Advertisements

6 장. printf 와 scanf 함수에 대한 고찰 printf 함수 이야기 printf 는 문자열을 출력하는 함수이다. – 예제 printf1.c 참조 printf 는 특수 문자 출력이 가능하다. 특수 문자의 미 \a 경고음 소리 발생 \b 백스페이스 (backspace)
1. 도형의 연결 상태 2. 꼭지점과 변으로 이루어진 도형 Ⅷ. 도형의 관찰 도형의 연결상태 연결상태가 같은 도형 단일폐곡선의 성질 연결상태가 같은 입체도형 뫼비우스의 띠.
수학을 통해 배우는 IT 과학의 세계 전북대: 한상언 교수.
재료수치해석 HW # 박재혁.
이산적 기법들 최 수 미
그래픽 하드웨어.
Report #5 - due: 4/13 다음 10*5의 희소 행렬 A, B를 고려하라.
최윤정 Java 프로그래밍 클래스 상속 최윤정
Lecture #8 제 5 장. 관측(viewing).
신호처리 실험 (Signal Processing Lab)
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
공차 및 끼워맞춤.
Chap 9. 텍스쳐(Texture).
제 1 장. 컴퓨터 그래픽스 시스템과 모델 - 3D 컴퓨터 그래픽스 구조 - OpenGL API 개요
학습목표 8장. 가시성 판단 후면제거의 정의와 처리방법을 이해한다. 절단작업의 정의와 처리방법을 이해한다.
2장. 그래픽 하드웨어 학습목표 그래픽 출력장치의 일반적인 작동원리를 이해한다.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
Error Detection and Correction
멀티미디어 시스템 (아날로그 이미지,신호를 디지털로 변환 방법) 이름 : 김대진 학번 :
6장. printf와 scanf 함수에 대한 고찰
다각형.
프로그래밍 랩 – 7주 리스트.
11장. 1차원 배열.
3차원 객체 모델링.
C#.
제4장 제어 시스템의 성능.
13. 연산자 오버로딩.
CHAP 10:그래프 (2) 순천향대학교 하상호.
피타고라스 정리 Esc.
Chapter03 캔버스(1) HTML5 Programming.
군집 분석.
자료구조: CHAP 7 트리 –review 순천향대학교 컴퓨터공학과 하 상 호.
수학 토론 대회 -도형의 세가지 무게중심 안다흰 임수빈.
Quiz #7 다음 수들을 합병 정렬과 퀵 정렬 알고리즘을 이용하여 오름 차순으로 정렬하였을 때, 데이터 이동 회수를 각각 구하라. 여러분은 정렬 과정을 단계별로 보이면서 이동 회수를 추적해야 한다. 단, 퀵 정렬시에 피봇으로 배열의 왼쪽 첫 번째 원소를 선택한다. 5.
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
USN(Ubiquitous Sensor Network)
자율주행 차량용 드라이빙 컴퓨팅 하드웨어 플랫폼 05
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
4장 기하학적 객체와 변환 - 기하 1장 – 그래픽스 시스템과 모델 2장 – 그래픽스 프로그래밍 3장 – 입력과 상호작용
정다면체, 다면체와 정다각형, 다각형의 관계 한림초등 학교 영제 6학년 5반 송명훈.
다면체 다면체 다면체: 다각형인 면만으로 둘러싸인 입체도 형 면: 다면체를 둘러싸고 있는 다각형
삼각형에서 평행선에 의하여 생기는 선분의 길이의 비
⊙ 이차방정식의 활용 이차방정식의 활용 문제 풀이 순서 (1)문제 해결을 위해 구하고자 하는 것을 미지수 로 정한다.
평 면 도 형 삼각형 다각형 원과 부채꼴 다각형과 원 학습내용을 로 선택하세요 다각형과 원
1. 선분 등분하기 (1) 주어진 선분 수직 2등분 하기 ① 주어진 선분 AB를 그린다. ② 점 A를 중심으로 선분AB보다
선 그리기.
Window, Viewport Window, Viewport.
서울대학교 컴퓨터공학부 김명수 행렬과 2차원 변환 서울대학교 컴퓨터공학부 김명수
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
작도 작도 작도: 눈금 없는 자와 컴퍼스만을 사용하여 도형을 그리는 것
Chapter 1 단위, 물리량, 벡터.
DA :: 퀵 정렬 Quick Sort 퀵 정렬은 비교방식의 정렬 중 가장 빠른 정렬방법이다.
원의 방정식 원의 방정식 x축, y축에 접하는 원의 방정식 두 원의 위치 관계 공통접선 원과 직선의 위치 관계
학 습 목 표 직선의 방정식 직선의 방정식 두 직선의 위치 관계 두 직선의 교점을 지나는 직선 점과 직선 사이의 거리.
Chapter 1 단위, 물리량, 벡터.
1. 접선의 방정식 2010년 설악산.
1. 정투상법 정투상법 정투상도 (1) 정투상의 원리
9 브라우저 객체 모델.
컴퓨터공학과 손민정 Computer Graphics Lab 이승용 교수님
제 4 장 Record.
어서와 C언어는 처음이지 제21장.
영역 기반 처리.
컴퓨터는 어떻게 덧셈, 뺄셈을 할까? 2011년 10월 5일 정동욱.
아날로그 신호를 디지털 신호로 변환하는 A/D 변환기 A/D 변환 시 고려하여 할 샘플링 주파수 D/A 변환기
C++ Espresso 제15장 STL 알고리즘.
6 객체.
Lecture #6 제 4 장. 기하학적 객체와 변환 (1).
Presentation transcript:

렌더기의 구현 최 수 미 smchoi@sejong.ac.kr http://www.sejong.ac.kr/~smchoi

렌더기의 구현 직선이 화면에서 어떻게 그려지는지? 다각형은 어떻게 채워지는지? 관측공간 밖의 기본 요소들은 어떻게 될지? 그래픽스 시스템의 어느 부분이 쉽거나 부담스러운지? 텍스처 사상과 알파 채널 사용과 같은 프레임 버퍼를 사용하는 새로운 기능

네 가지 주요 작업 프로그램 내의 기본요소의 정의에서 디스플레이까지 모델링 (다각형의 생성) 기하학적 처리 (다각형에 대한 처리) 정규화 절단 은면 제거 음영처리 투영 3D, 부동 소수점 수 래스터화(화소에 대한 처리) 2D, 고정 소수점 수 디스플레이

파이프라인 구현

파이프라인의 구현전략 (1) 객체지향적 for (each object) render (object); 전향적 (2) 영상지향적 for (each pixel) assign_color (pixel); 후향적 효과적 자료구조를 필요로 한다

객체지향 접근

변환의 구현 모델-관측 변환 투영 변환 등가적 접근 객체좌표, 카메라좌표, 절단좌표, 정규화 장치,윈도우좌표 변환 순서

객체 좌표계에서 모델관측행렬에 의해서 눈 좌표계로 변환됨. 관측자가 원점에 있음 정규화 과정에 의해서 객체는 사전 왜곡. 왜곡된 객체들의 등가적 직교 투영을 위해서 투시관측에서는 절두체, 평행관측에서는 평행육면체의 관측공간을 갖게 됨 – 절단공간 정규화 장치 좌표계 (normalized device coordinate) : 절단된 정점의 w 성분이 1이 아니라면, 동차 좌표에서 정규 삼차원 좌표로 변환하기 위해 투시제산. 절단이 이루어지면 절단되지 않은 점들이 정규화 장치 좌표계에 표현됨. 깊이정보는 은면 제거를 위해 유지됨 화면 좌표계로의 변환

시역 변환

선분 절단 Cohen-Sutherland 절단 기본개념 선분의 끝점들을 부호화한다 선분들이 모두 윈도우 안에만 있든지 윈도우 밖에만 있을 때까지 계속해서 분할한다 분할은 윈도우 경계에서 일어난다 이차원 절단

대부분의 부동소수점 곱셈과 나눗셈을 부동소수점 감산과 비트연산으로 대치함 외각부호(outcode)를 사용 좌 우 하 상

outcode1 = outcode2 = 0000 : 수용 (AB) 네 가지 경우 outcode1 = outcode2 = 0000 : 수용 (AB) outcode1 != 0000 , outcode2 = 0000 (또는 그 반대) : 단축 (CD) (outcode1 & outcode2) != 0000 : 제거 (EF) 같은 변의 외부에 놓여 있음 (outcode1 & outcode2) = 0000 : 제거 또는 단축 (GH, IJ) 다른 변의 외부에 놓여 있음

Cohen-Sutherland line clipper int ClipSegment (Point2& p1, Point2& p2, RealRect W) { do { if(trivial accept) return 1; // some portion services if(trivial reject) return 0; // no portion survives if(pl is outside) if(pl is to the left) chop against the left edge else if(pl is to the right) chop against the right edge else if(p1 is below) chop against the bottom edge else if(pl is above) chop against the top edge } else // p2 is outside if(p2 is to the left) chop against the left edge else if(p2 is to the right) chop against the right edge else if(p2 is below) chop against the bottom edge else if(p2 is above) chop against the top edge While (1);

많은 수의 선분이 있지만, 실제로 몇 개만 디스플레이되는 경우에 가장 잘 동작 대부분이 accept 이거나 reject 일 경우 적합 이 알고리즘은 삼차원으로 확장 가능

직선의 표현 명시적 표현 (explicit form) 매개변수 표현 (parametric form)  수직선 표현이 어려움  수평선, 수직선 표현 가능 (안정적)

Liang-Barsky 절단

Liang-Barsky 절단 윈도우 상변과(y=ymax)의 교차점

다각형 절단 다각형 절단을 선분 절단으로 볼 수 없다 절단의 결과 여러 개의 다각형이 생성될 수 있다 절단의 결과 다각형의 수가 증가하는 것이 바람직하지 않을 수 있다 볼록 다각형으로의 분할(tesselation) 오목한 다각형의 절단 객체의 수를 증가 구현상의 어려움

볼록한 다각형의 분할

Sutherland-Hodgeman 절단

다른 기본 요소의 절단 복잡한 객체의 절단 한정 사각형(bounding box) 다각형 정점들의 x와 y값의 최소값과 최대값 한정 사각형이 윈도우에 걸쳐 있을 때만, 다각형의 모든 모서리를 사용하여 자세한 절단 수행 다각형과 절단 윈도우

곡선, 곡면, 문자열 대단히 어렵다 두 가지 접근법 다각형으로 근사 프레임 버퍼에서 절단 래스터화 까지 절단이 지연될 수 있지만, 래스터화 전에 절단하는 것이 더 좋다 래스터 객체 (예> 화소블럭) 은 프레임 버퍼에서 절단될 수 있다

삼차원에서 절단

Cohen-Sutherland 절단 4비트 외곽부호를 6비트 외곽부호로 대체 추가된 2bit (절단 공간의 앞 또는 뒤)

Liang-Barsky 절단 선분의 삼차원 매개변수 표현 z 축에 대한 방정식 추가 파이프라인 절단기는 절단 공간의 앞과 뒤에 대해 절단하기 위하여 두 모듈 추가

Sutherland-Hodgeman 절단 파이프라인 절단기는 절단 공간의 앞과 뒤에 대해 절단하기 위하여 두 모듈 추가

이차원과 삼차원 절단의 차이 평면과 직선의 교차계산 교점

경사 투영 = 데이터를 밀림 변형 -> 직교 투영 정규화와 절단 직교 관측에 대한 절단 경사 관측에 대한 절단 경사 투영 = 데이터를 밀림 변형 -> 직교 투영 밀림 전의 평면도 밀림 후의 평면도

은면 제거 은면 제거(Hidden Surface Removal) 두 가지 접근법 객체를 래스터화 하기 전에 각 객체가 관측자에게 보이는지, 다른 객체에 의해 가려지는지 알기 위함 두 가지 접근법 객체공간적 방법 영상공간적 방법 4 가지 경우 K개의 다각형 중 하나 선택, 남은 k-1 개의 다각형과 비교 … 반복

영상공간적 방법 렌더링의 정확도를 높이기 위해 각 픽셀에서 하나 이상의 광선을 사용할 수 있음

후면 제거 후면제거 후향 다각형을 선별(culling) 은면 제거를 적용하기 전에 후향 다각형 제거 보이는 면에서

정규화 장치 좌표계로 변환 후에는 모든 관측은 투영의 방향이 z축인 직교관측 평면의 식이 c의 부호만 계산하면 됨 OpenGL의 후면 제거함수 : glCullFace 함수

Z-버퍼 알고리즘 Z 버퍼 알고리즘 영상-공간에서 동작 화소가 아닌 다각형에 대해서 루프 파이프라인 구조와 호환, 주사 변환처리의 일부로 간주 가능 하드웨어나 소프트웨어에서 구현 용이

예> 32bit 요소를 가진 1024*1280 z 버퍼 <초기화> Z 버퍼의 각 요소는 최대 거리로 초기화 프레임 버퍼는 배경색으로 초기화 <진행 순서> 다각형을 하나씩 래스터화 화소를 통한 광선과 다각형의 교차점에 대응하는 다각형 상의 점에 대해 투영 중심으로부터 거리 계산 계산된 값을 Z 버퍼의 값과 비교 Z 버퍼의 거리보다 크면, 이 점은 보이지 않고 거리보다 작으면 Z 버퍼의 거리를 갱신하고 프레임 버퍼의 대응점에 대하여 계산된 음영을 배치

증분적 Z-버퍼 알고리즘 주사선 별로 래스터화 하는 방식에 의해 다각형을 래스터화

깊이정렬과 화가 알고리즘 은면 제거에 대한 객체공간 알고리즘 알고리즘 다각형들을 정렬 전향 렌더링

x와 y 범위에서 겹침에 대한 검사 저장된 다각형의 z 범위

순환적 겹침 올바른 순서 없음 다각형을 분할하여 새로운 순서 찾기 시도 한 다각형의 모든 정점이 다른 다각형에 의해 결정되는 평면의 같은 편에 놓임 관통하는 다각형

주사선 알고리즘 한번에 하나의 다각형보다는 한번에 한 주사선에 대해 동작 증분적 깊이 계산을 사용

선분의 주사 변환 DDA(Digital Differential Algorithm) for(ix = x1; ix<=x2; ix++) { y +=m; write_pixel(x, round(y), line_color); }

큰 기울기와 작은 기울기를 갖는 직선들에 의해 생성된 화소들 기울기가 1보다 큰 경우, x와 y의 역할을 변경

Bresenham 알고리즘 DDA의 실수 덧셈을 정수덧셈과 부호검사로 대체 가장 보편적이며, 하드웨어로 구현

부동 소수점 연산 -> 고정 소수점 연산으로 대치 알고리즘을 증분으로 적용

다각형의 주사변환 내부-외부 검사 교차 검사 또는 홀수-짝수 검사 내부 : 홀수 개의 변과 교차 흔히, 점을 통과하는 직선을 주사선을 대치하고 내외부 결정을 위해 다각형의 변들과의 교차를 셈 홀수-짝수 검사에 의한 채우기

감음 검사 (winding test) 다각형을 점이나 직선 주위에 감겨지는 매듭으로 생각 (임의의 한 정점에서 시작해서 일정한 방향으로 돌아서 시작점으로 다시 돌아오는 순회를 생각) 감음수에 따라 채우기 방식을 변경 가능 2 1 감음수가 0 보다 크면 채우기

OpenGL과 오목한 다각형 볼록 다각형만이 올바르게 렌더링되는 것이 보장 다각형을 삼각형인 평면 볼록 다각형들로 분할 가능하면 삼각형 띠 또는 삼각형 부채꼴과 같이 성질이 좋은 삼각형들로 분할 GLU 라이브러리 안에 분할기 (구멍이 없는 단순한 다각형에 대해서 작동)

(with the vertex callback) 분할기 객체 (tessellator object) mytess = gluNewTess( ); gluTessBeginPolygon(mytess, NULL); gluTessBeginContour(mytess); for(i=0; i<nvertices; i++) gluTessVertex(mytess, vertex[i], vertex[i]); gluTessEndContour(); gluTessEndPolygon(mytess); location an opaque pointer (with the vertex callback)

z-버퍼를 이용한 주사변환 직교투영, 은면제거, 음영처리를 동시에 실행 정규화 장치좌표계 화면 좌표계

채우기와 정렬 범람 채우기 (flood fill) Bresenham 알고리즘을 사용하여 다각형의 변들을 프레임 버퍼로 래스터화 flood_fill(int x, int y) { if (read_pixel (x, y) == WHITE) write_pixel (x, y, BLACK); flood_fill (x-1, y); flood_fill (x+1, y); flood_fill (x, y-1); flood_fill (x, y+1); }

주사선 알고리즘 구간(span)이 표시된 다각형

주사선 알고리즘 (계속) 정점 리스트에 의해서 생성된 다각형 주사선에 의해 채우기를 할 때 정점들의 바람직한 순서 Y-X 알고리즘에 대한 자료 구조

특이성 (singularity) 해결 1> 처한 상황이 어느 경우인지를 판단한 후, 적절하게 변 교차 계산 함으로써 특이성 배제 예: 실제 프레임 버퍼의 2배 해상도를 갖는 가상 프레임 버퍼 (화소는 짝수 y, 정점은 홀수 y) OpenGL에서는 화소의 중심을 정수 사이의 중간에 둠 0번 또는 2번 교차 1변 교차

앤티엘리어싱 (Antialiasing) 이상적인 래스터 직선 엘리어싱된 선분 앤티엘리어싱된 선분 (a) 확대 (b) 확대 면적 평균에 의한 앤티엘리어싱

한 화소를 공유하는 다각형 : 공간 영역 엘리어싱 화소에 할당된 색 : 과측자에게 가장 가까운 다각형과 연관된 색 세 삼각형의 색의 면적 가중 평균에 기반한 색 할당 애니메이션 : 시간 영역 엘리어싱 화소당 하나 이상의 광선을 사용 앤티엘리어싱 참조 : 색그림판 1, 색그림판 2

디스플레이 고려 사항 색체계들 사이의 차이들을 삼자극 값을 표현하기 위한 다른 좌표계를 간주할 수 있음 색도좌표 (chromaticity coordinate) : RGB 색에 대한 삼자극 값(T1, T2, T3)이 주어질 때 색도 좌표

색도 좌표계에서 만들 수 있는 삼각형 볼 수 있는 색과 디스플레이의 색범위

HLS(hue-lightness-saturation) 색상 - 명도 - 채도

감마수정

흩뿌리기(Dithering)와 반명암법(Halftoning) 색 해상도와 공간 해상도를 교환 공간해상도를 4배 감소, 두단계 계조값이 아닌 17단계(검은 화소의 개수)로 디스플레이 glEnable(GL_DITHER)