그래픽스
캐드/캠, 프레젠테이션, 가상현실, 미술, 애니메이션/게임, 교육 훈련, 자연과학 가시화, GUI
그래픽 구성 요소 : 모델링 , 렌더링
레스터 그래픽 장비 : 그래픽 디스플레이, 프레임 버퍼
벡터 그래픽 장비 : 프레임 버퍼 X
가산모델 RGB 보색 CMY
감산모델 CMY
HSV : 색상, 채도, 명도
하프토우닝 : 점의 크기를 다양하게 함으로써 여러 가지 회색 레벨을 만들어내는 기법
디지털 하프토우닝 : 점의 개수로 조절
감마보정 : 비선형 전달 함수를 사용하여 빛의 강도 신호를 비선형적으로 변형
지엘 파이프라인 : 변환 – 절단 – 투상 - 래스터 프로세서
좌표계
지엘 실행모드
- 직접모드 : 화면 렌더링과 동시에 물체 정보 모두 파기, 다시 그리려면 전체 다시 실행
- 보류모드 : 이미 정의된 물체를 컴파일 된 형태로 재사용
- 더블 버퍼링 : 프런트 버퍼와 백 버퍼를 둠
좌표변환 기하변환
벡터공간
- 스칼라 : 크기 O 방향성 X
- 벡터 : 크기 O 방향성 O
어파인 공간 : 점을 벡터의 동족으로 처리하여 벡터 공간을 확장
3차원 직교좌표계
동차좌표 (1,2,1,1) = (2,4,2,2)
벡터 : (x, y, z, 0)
점 : (x, y, z, 1)
복합행렬 - 교환법칙X
기하변환 – 강체 변환(모습불변), 유사변환, 어파인변환(평행), 원근변환, 선형변환
모델변환, 시점변환
모델 좌표계 / 전역 좌표계 / 시점 좌표계
지엘 초기 실행시 전역 좌표계 = 모델 좌표계 (WCS = MCS)
변환 -> 전역 좌표계 모델 좌표계 불일치 발생
변환행렬 : (WCS기준) 전역 좌표계를 모델 좌표계로 일치시키기 위한 행렬
: 파이프라인
모델행렬 뷰행렬 : 모델뷰행렬 (모델 + 뷰 행렬)
모델좌표 -> 전역좌표 -> 시점좌표 ->
후위곱셈
행렬스택 glPushMatrix() glPopMatrix()
투상 : 3차원 물체를 2차원 화면으로 사상 glMatrixMode(GL_PROJECTION)
평행투상 : 무한대 거리
(정사투상, 축측투상, 경사투상)
축측투상에서 투상선은 투상면과 직교
경사투상은 투상선 직교X 투상면과 직교
원근투상 : 유한한 거리
소실점 : 원근투상 결과로 평행선이 만나는 점
원근분할 : 동차좌표의 마지막 요소로 이전 요소 나누는 작업, 절단 이후 원근변환
원근투상 -> 멀어질수록 전봇대 간격도 좁아지는 현상 해결 -> 비선형 변환
지엘 투상변환의 평행투상은 특이변환으로 역변환이 없다.
항상 투상 범위(가시부피)를 제한할 필요가 있다.
정규화 가시부피(CVV: canonical view volume) : 가로 세로 높이 2인 정육면체로 투상
이유 : 평행투상, 원근투상의 파이프라인 처리구조가 동일
절단 연산이 간단, 다양한 해상도의 화면 좌표계로 변환 간단
정규화 장치좌표계
절단 이후 원근분할에 의해 물체 정점을 3차원 좌표로 변환
뷰포트 변환
정규화 장치좌표계에서 화면 좌표계로 가는 작업
z값 재 정규화 : z 값 범위를 [-1, +1] -> [0, 1]
가시성판단
후면제거 -> 절단 -> 3차원공간(원근분할) -> 은면제거 -> 투상
정규화된 외적벡터 = 정규화 법선벡터
법선벡터 : 면의 방향을 표시
벡터 내적
s·t = |s||t|cosθ= x1x2 + y1y2 + z1z2
벡터 외적
s x t = |s||t|sinθ = 오른쪽아래 + , 왼쪽아래 -
평면 방정식
Ax + By + Cz = Q · N
Q와 N의 내적은 스칼라값 D
Ax + By + Cz + D = 0 à P, Q 가 속한 평면의 법선 벡터 = N (A,B,C)
후면제거 : 보이지 않는 면의 거의 절반을 제거
법선벡터의 z 값만으로 판단가능 : z > 0 후면 , z < 0 전면
glCullFace(GL_FRONT) / GL_BACK, GL_FRONT_AND_BACK
앞면 또는 뒷면을 나타내는 면을 제거할 수 있는 지 여부를 지정함
glFrontFace(GL_CCW) / GL_CW -> 시계 방향, 반시계방향으로 설정
절단 알고리즘
코헨 – 서더랜드 알고리즘 : 2차원 선분 2차원 사각형을 기준(and 연산)으로 절단하는 알고리즘
리앙 – 바스키 알고리즘 : 교차점이 상대적인 위치(순서에 맞는지)에 의한 절단 알고리즘
서더랜드 핫지먼 알고리즘 : 2차원 절단 다각형을 기준으로 다각형 절단 알고리즘, 외부점 모두 무시
볼록 다각형에만 적용, 오목 다각형은 오류
웨일러 – 애서톤 알고리즘 : 내부에서 외부로 가는 교차점이 추가되면 즉시 그 교차점에서 절단 사각형을 따라서 반시계 방향으로 이동
정점의 내부/외부 판정 방법 : 점P - 절단면 상의 점 Q > 0 이면 외부에 있다. (PQ벡터) (Q-P) · N
동차좌표 사용 ( 점과 평면간의 거리 d ) - 점 P를 식에 대입 (Ax + By + Cz + D = 0) 이면 면에 있다.
t 값 계산 : t = (Q - R) · N / ( S – R) · N
은면제거 : 앞 물체에 가려서 안 보이는 부분
후면제거 – 절단 – 은면제거 - 원근분할
은면제거 그래픽 알고리즘
물체공간 알고리즘 : 페인터 알고리즘 – 깊이 정렬이 필요
영상공간 알고리즘 : 지버퍼 알고리즘(OpenGL)
페인터 알고리즘 : 그려져야 할 물체의 거리를 계산하여 거리가 먼 것부터 그리는 알고리즘
지-버퍼 알고리즘 : 3차원 그래픽에서 숨은 선 및 면의 제거를 위해 각 화소의 z좌표값을 저장할 수 있는 z-버퍼와 재생 버퍼를 사용하여 화상을 표시하는 알고리즘
깊이버퍼 or 지버퍼(Z-buffer) : 은면제거 속도를 높이기 위해 사용되는 하드웨어 메모리(거리 값)
gluInitDisplayMode(GLUT_DEPTH) / glEnable(GL_DEPTH_TEST)/ glClear(GL_DEPTH_BUFFER_BIT)
선형보간 : 물체 내부점의 깊이 및 컬러 계산
조명과 음영
조명모델 (Illumination Model) : 광원, 물체면, 시점 등을 기준으로 어떤 빛의 성분이 어느 정도 세기로 우리 눈에 도달할지에 대한 방법론
전역조명모델 (Global -) : 다른 물체면에서 반사되어 입사되는 빛까지 고려한 조명모델
지역조명모델 (Local -) : OpenGL의 조명 모델, 광원으로부터 직접 물체면으로 입사되는 빛만을 고려한 모델 (그림자나 주변광을 활용하여 전역조명 효과 가능)
광원
면적광원 / 점광원 : 분산 점광원으로 근사화
위치성 광원
옴니라이트(Omni Light) : 빛이 모든 방향으로 방사형으로 진행
근거리 광원 : 광원의 위치가 중시됨
방향성 광원
재향성 광원 : 빛이 물체면을 향하여 일정한 방향으로 진행
원거리 광원 : 빛의 방향성이 중시됨 ( 예) 태양광 )
스포트라이트 (Spot Light)
빛이 방사형으로 진행하며, 공원이 유한 거리에 존재
하나의 방향을 향해서만 진행
입사각 : 광원벡터L 법선벡터N이 이루는 각
주변반사 : 주변광 / 광원에 직접 노출되지 않는 면에 밝기를 부여
주변광 세기 : 거리 제곱에 반비례
확산반사 : 물체면과 광원과의 공간적인 관계에 따라 명암을 부여 (난반사에 해당)
완벽확산체 (모든 방향으로 반사)
방향성 확산체 : 지역조명 모델의 그래픽 처리를 단순화하기 위해 완벽 확산체 가짐
확산광 : 면의 밝기는 입사각의 코사인에 정비례
경면반사 : 경면광 (반질반질한 표면에서 반사되는 빛), 광원의 색 / 정반사 (입사각 = 반사각)
반사광은 시점벡터 V가 (반사)R벡터와 일치할때 가장 크다. 세기는 conθ
반사광의 합성: 약화함수 - 거리에 따른 빛의 약화 f = 1 / a + bD + cD²
지역반사모델 : 주변반사. 확산반사, 경면반사
음영 : 물체 면의 색상을 부여
플랫 셰이딩 : 주어진 하나의 다각형 전체를 동일한 색으로 칠함, 중심점을 계산
마하밴드 효과
구로 셰이딩 : 다각형 내부를 서로 다른 색으로 칠함, 정점에 대하여 색 계산 / 색을 보간
주변광과 확산광 만을 고려함 , 법선벡터 계산 오류 가능
퐁 셰이딩 : 정점의 색 대신 정점의 법선벡터를 보간, 경면광 부여 가능
지엘 프로그래밍에서 조명과 음영을 위한 처리
조명기능 활성화, 광원 정의, 음영모드 정의, 법선벡터 정의, 물체면 특성 정의, 조명모델 정의
□ 텍스쳐
l 텍스쳐 : 3차원 물체의 표면에 2차원 이미지를 입힘
l 범프 맵 (Bump map) : 물체면을 조작하는 대신, 법선벡터를 조정
l 확산광 계수를 부분적으로 변경, 거칠기를 함수화하여 경면광에 반영
l 다각형 분할 : 다각형에 대해 서로 다른 색, 표면 기울기를 부여
2차원 영상을 직접 평면에 입힘
단점 : 시점을 변경할 경우 적용 불가능
텍스쳐 맵핑 : (s, t) 좌표로 표현된 2차원 텍스쳐 영상을, (x,y,z) 좌표로 표현된 3차원 물체면으로 사상
맵핑 시기 : 레스터 변환 시점
l 텍셀 (Texture Element) : 텍스쳐 영상의 기본단위
l 엘리어싱 : 계단현상 발생가능
l 투상이후 텍스쳐 맵핑시 텍스쳐 맵핑 정확도 감소 (원근투상 멀어지면 작아짐)
l 파라미터 곡면 : 표면상의 점(x,y,z)을 경도, 위도(u, v)로 표현 가능
l 다각형 곡면 : 2단계 맵핑
l S 맵핑 후에 O 맵핑 수행
l S 맵핑 : 텍스쳐를 중개면에 입힘
l O 맵핑 : 물체를 중개면 내부에 넣고 물체면에 텍스쳐를 입힘
l 주변 맵핑 : 물체를 에워싼 주변 환경을 물체면에 맵핑
l 경면 반사를 위주로 표현할 수 있는 물체 = 반사 맵핑
l O 맵핑에서 시점 반사벡터 방식 사용
l 안티 에일리어싱
l 비선형 맵핑 : 평면 사각형이 곡선 사변형으로 변환
l 확장관계 : 텍셀 크기가 한 픽셀로
l 축소관계 : 여러 텍셀이 한 픽셀로
l 양방향 선형보간 : 주로 확장관계에서 비율로 색상 계산
l 밉맵 : 한 화소가 여러 텍셀에 걸쳐짐
해상도 별로 평균치를 미리 계산하여 텍스쳐 맵에 저장
지엘
glNormal3f, glTexCoord2f(텍스쳐 정점) glVertex3x(물체 정점)
래스터 변환 : 기하파이프라인 + 텍스쳐 연산
'Language > C++ & openGL' 카테고리의 다른 글
그래픽스 함수 모음 openGL (0) | 2020.07.04 |
---|---|
오픈지엘 행렬스택 glPushMatrix/glPopMatrix, 시점변환gluLookAt, 평행|원근 투상 glOrtho/gluPerspective (0) | 2020.06.11 |
오픈지엘 gluLookAt 시점 변환 모델 잘림 해결, 뷰포트 (0) | 2020.06.05 |
오픈지엘 이동 회전 크기 복합 변환 (0) | 2020.05.23 |
오픈지엘 마우스 클릭으로 다수의 선 그리기 (0) | 2020.05.21 |
댓글