일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Detectron2
- connx
- CycleGAN
- ChatGPT
- 설치
- 이터널리턴
- 언리얼엔진
- 파이썬
- ctypes
- yolo
- 게임개발
- 파워셀
- C언어
- 욜로
- 프로그래머
- 호흡분석
- NPY
- 리뷰
- 헬스케어
- TensorFlow
- 논문
- 텐서플로우
- 언어모델
- 딜러닝
- 개발자
- 딥러닝
- 논문리뷰
- pyqt5
- python
- V3
- Today
- Total
사냥꾼의 IT 노트
OpenGL로 배우는 3차원 컴퓨터 그래픽스 개념 정리 - 래스터 변환 본문
■래스터 변환
●래스터 = 화소 (pixel)
●래스터 변환 = 스캔 변환 (scan conversion): 화소로의 사상, 즉 물체를 표현하기 위해 어떤 화소를 밝힐 것인지를 결정하는 작업 (정규화 장치 좌표에서 뷰포트로의 사상) -> 물체 공간의 점, 선, 면이 모두 사상되어야 함
●부동 소수 좌표에서 정수 좌표로 전환되는 과정에서 반올림 발생
●정점 좌표가 화면 좌표로 변환되면 이후에는 화면 좌표만 사용됨
●선분과 내부면은 화면 좌표에서 판단되며, 지-버퍼에 의한 은면 제거와 동시에 이루어짐
●깊이와 색 보간: 정점의 z값 (정점의 색)으로부터 선분 및 내부면의 깊이 (색) 보간
●화면에 보이는 모든 것은 래스터 변환의 결과: 최대의 연산 속도, 최대의 정확성이 요구됨
■선분의 래스터 변환
●선분: 래스터 변환 알고리즘이 적용되는 가장 기본 객체 -> 선분의 양끝 정점이 화소 사상 후 래스터 변환에 의해 나머지 부분 처리
●기울기를 기준으로 샘플링
○기울기 > 1: y좌표 증가
○기울기 > 1: x좌표 증가
●교차점 계산: 부동 소수 곱셈으로 인한 속도 저하
●DDA 알고리즘: 이젠 교차점의 y좌표에 기울기를 더한 값으로 계산
○부동 소수 덧셈이므로 속도가 훨씬 빠르나, 정수 연산에 비하면 속도는 느림 (반올림 연산)
○연산 결과의 정확도: 부동 소수의 경우 뒤자리가 잘려 나가며, 연속적인 덧셈에 의한 오류 누적
○표류 (Drift): 선택된 화소가 실제 선분에서 점차 멀어지는 현상
●브레스넘알고리즘: 결정 변수에 의해 중점이 선분의 위인지 아래인지를 판단하는 알고리즘
○모든 것을 정수 연산으로 바꾼 기법이라 속도가 빠름
○표류 현상이 발생하지 않음 (하드웨어 구현)
○첫 8분면에서만 정의함
○원 생성 알고리즘
●화소 좌표: 일반적으로 화소 좌하단 모서리를 기준으로 부여함
○화소: 일정한 크기를 지닌 영역
○선분 길이 조정을 위해 마지막 화소는 제외시킴
○면적 조정을 위해 외곽 화소는 제외시킴
■다각형의 래스터 변환
●현시적 표현: y = 2x + 4
●묵시적 표현: f(x, y) = y - 2x - 4 = 0
●파라미터 표현: (t, 2t + 4)
●삼각형의 래스터 변환: p, q, r등 다각형의 모든 정점을 항상 반시계 방향으로 정의함
○먼저 정의된 정점을 (x1, y1)으로, 나중에 정의된 정점을 (x2, y2)로 정의
○선분은 반시계 방향으로 진행
1. 왼쪽: f(x, y) > 0
2. 오른쪽: f(x, y) < 0
●주사선 채움 알고리즘 (잔처리): 채움 다각형을 래스터 변환함 (홀수 규칙 사용)
○채움 다각형: 내부 화소를 일정한 색으로 채워 넣은 다각형
○홀수 규칙: 현재 교차점 번호가 홀수이면 짝수가 되기 직전까지 화소를 칠해가는 방법 => 길이 보존을 위해 짝수번째는 포함하지 않음
○극대점: 교차하지 않은 것으로 간주함
○극소점: 2번 교차한 것으로 간주함
○극대 및 극소점: 1번 교차한 것으로 간주함
○주사선과 평행인 경우는 선분이 아예 없는 것으로 간주함
●공간적 응집성: 인접 화소끼리는 같은 색이 칠해질 확률이 높으며 같은 색의 화소끼리 서요 모여 있다는 특성
●선분 리스트 (선분 테이블): 활성화 선분 리스트를 만들기 위해 다각형을 구성하는 모든 선분에 대한 정보를 망라한 것
1. 선분 위쪽 끝점의 y좌표
2. 선분 아래쪽 시작점의 x좌표
3. 선분 기울기의 역수
●내외부 판정 : 블록 다각형에서만 성립하며, 왼쪽이 내부임
○오목 다각형: 반드시 하나 이상의 정점이 어떤 선분의 오른쪽에 있음
○벡터 외적
●분할
●논 제로 와인딩 규칙: 주어진 화소가 다각형 외부인지 내부인지를 판단하는 데 쓰이는 규칙
○감싸기 수: 선분이 반시계 방향으로 그점을 몇번이나 감싸는가...최종 감싸기 수가 0이 아니면 내부점으로 간주함
●씨앗 채움 알고리즘
1. 어떤 화소가 다각형 내부임을 확인
2. 이를 씨앗으로 해당 화소의 색을 인근으로 번져 나가게 함
3. 경계 채움와 홀수 채움 알고리즘
○경계 채움 알고리즘: 4-방향 또는 8-방향으로 경계 색상을 만날 때까지 채워 나가는 방법
○홍수 채움 알고리즘: 현재 다각형 내부 색이 완전히 동일할 때, 현재 색이 계속되는 한 지속적으로 번지는 방법
■보간법
●무게중심 좌표: 삼각형 내부를 세 정점의 합으로 표현했을 때의 계수 -> 주어진 정점의 색/깊이로부터 내부 화소의 색/깊이를 보간하는 데 사용됨
●컨벡스 헐: 주어진 점을 모두 포함하는 가장 작은 볼록 다각형
●경계 상자: 테스트 대상을 일정 크기의 사각형으로 국한 시키는 것
●양방향 선형 보간: 벡터 외적보다 상대적으로 빠르며, 무게중심 좌표를 구하는 데 쓰임
■OpenGL의 그래픽 요소
※모든 지엘의 기본 요소는 정점으로 명시됨
●다각형의 제약 조건 -> 분할 못함
○단순 다각형
○볼록 다각형
○평면 다각형
●기본 요소의 속성
○색 (color)
○크기 (size)
○두께 (width)
○패턴 (stipple pattern)
●GL_POINTS (점)
●GL_LINES (선)
○GL_LINE_STRIP
○GL_LINE_LOOP
●GL_POLYGON (도형)
○GL_TRIANGLES
○GL_QUAD_STRIP
○GL_TRIANGLE_STRIP
○GL_TRIANGLE_FAN
●void glShadeModel(): 다각형의 내부 채움 모드 설정
○GL_FLAT: 단일 색상
○GL_SMOOTH: 색상 보간
■비트맵과 포스트스크립트
●비트맵: 영상을 화소 단위 배열로 표현한 것 -> 영상을 구성하는 개별 화소의 색을 표현하거나 저장하는 특징이 있음
●에일리어싱: 계단 모양의 거친 경계선이 생기는 현상
●포스트스크립트 (벡터): 화소 개념은 없지만, 영상을 객체 단위로 명시한 것 (정점 좌표가 필요함)
○그래픽 메타파일: 렌더링 결과, 모델링 결과, 렌더링 명령어를 저장하는 형태
●자석 라소: 주사선을 따라서 왼쪽에서 오른쪽으로 급격한 색 변화가 일어나는 화소를 추적한 후 윤곽선으로 간주하여 객체를 체포하는 방식 (자동 추적)
●영상 압축
○무손실 압축: 완벽 복원
○손실 압축: 더 높은 압축률
●BMP: 일반적으로 압축을 가하지 않은 파일
●GIF: 무손실 압축을 사용한 비트맵 파일 (256 컬러)
○GIF89u: 애니메이션을 위한 파일 형식
●PNG: 무손실 압축이고, 더욱 향상된 투명성 제어 기능을 가짐
●JPEG: 손실 압축 기법 (24bit)
■에일리어싱과 안티 에일리어싱
●샘플링: 주어진 신호를 저장하기 위한 표본 추출 작업
●언더 샘플링: 원래의 신호를 왜곡하여 에일리어싱을 초래 (므와르 패턴)
●나이퀴스트 주파수: 샘플링 이론으로, 원래 신호 x 2
●스트로 보스코프 효과: 시간적 에일리어싱 (속도를 시각이 못 따라감)
●포인트 샘플링: 화면 사상에 사용되는 가장 일반적인 방법으로, 정중앙 또는 임의의 위치에서 물체 색을 해당 화소의 색으로 취하는 방법
●슈퍼 샘플링: 실제 화면 해상도보다 더욱 큰 해상도로 샘플링한 후, 이를 부분화소로 분할하여 평균해 해당 화소에 적용하는 방법
●지터링: 임의로 정해진 불규칙한 위치에서 샘플링함
●영역 샘플링: 물체가 차지하는 영역의 크기를 가중치로 하여 해당 화소의 색을 결정하는 방법 -> 화소 밝기를 면적에 비례하게 하는 방법
○동일 가중치
○피라미드 가중치
○원뿔 가중치
●사전 필터링: 물체 면적이 화소의 몇 퍼센트를 점유하는지를 미리 계산하는 방법
●블러링: 영상의 저주파 성분만을 걸러내는 저역 통과 필터를 사용한 결과 -> 블러링에 의한 안티 에일리어싱은 빠르지만 실제 물체의 색이 아니기 때문에 정확도가 떨어짐
'OpenGL로 배우는 3차원 컴퓨터 그래픽스' 카테고리의 다른 글
OpenGL로 배우는 3차원 컴퓨터 그래픽스 개념 정리 - 프래그먼트 연산 (0) | 2020.12.07 |
---|---|
OpenGL로 배우는 3차원 컴퓨터 그래픽스 개념 정리 - 텍스처 (0) | 2020.12.07 |
OpenGL로 배우는 3차원 컴퓨터 그래픽스 개념 정리 - 조명과 음영 (0) | 2020.12.07 |
OpenGL로 배우는 3차원 컴퓨터 그래픽스 개념 정리 - 가시성 판단 (0) | 2020.12.07 |