Computer Graphics 5. Projection
숙명여자대학교 컴퓨터 그래픽스 수업 - 유석종 교수님
# Projection
- viewing transformation: 뷰 변환 → 카메라 생성시 만들어짐
- viewpoint
> center of projection
> orgin of vcs
- projectors: 투상선
- line of sight: 바라보는 방향(시선) → 카메라가 바라보는 시선
- projection plane: 투영면
# Parallel Projection
- 시점은 무한한 거리에 있다고 가정
> 직교, 축측, 경사 (Orthographic, Axonometric, Oblique projections)
> parallel projectors: 투상선이 평행 → 물체가 동일한 사이즈로 투영이 됨
> 크기 그리고 물체의 투상선은 투영 이후에도 유지됨
# Orthographic Projection
- 투영 평면이 주 평면 중 하나와 평행 (x-y, y-z, z-x)
> 주평면: 두 축이 이루는 면
- 정면, 측면, 상단 뷰
- 프로젝터가 투영 평면에 직교
- 객체의 길이가 보존됨; 제한된 보기 위치; 건축 청사진에 사용됨
> 단점: 항상 세가지의 view(평면도, 정면도, 좌측면도)만 볼 수 있음 따라서 여러 view를 동시에 볼 수 없음
# Axonometric Projection
- 축측 투영
> 투상면은 어느 주평면과도 평행하지 않음
> 투상선은 투상면과 직교
- 객체의 여러 측면 보기를 제공
- 투영면과 주 평면 사이의 교차각의 Homogeneity
> isometric: 모든 각이 같음
> dimetric: 2개의 각이 같음
> trimetric: 각이 다 다름
# Oblique Projection
- 경사 투영
> 투영선이 서로 평행하며, 투영 평면(또는 시선)에는 직교하지 않음
# Oblique Projection - Game
- 동시에 여러 방향을 볼 수 있으며 입체감을 줌
- 2D → 경사 투영 → 3D 느낌을 줄 수 있음
# Perspective Projection
- 원근 투영
> 시점은 유한한 거리에 위치
> 투영선은 시각에서 퍼지게됨
> 애니메이션이나 게임을 위해 사물의 원근감을 표현함 → 사실감을 줌
- depth feeling
> 물체의 보이는 크기가 거리에 비례하여 변함
- vanish point: 소실점
> 원근 투영의 결과로 평행선이 만나는 지점
> 하나, 둘 , 세 개의 소멸점이 있음 → 가상 그래픽 상에서 여러개를 만들 수 있음
- Perspective transformation
> 직선과 평면이 보존되어 있음 * 평면도 평면으로 유지가 됨
> 꼭지점 간 거리 감소율을 증가시킴
# GL Parallel Projection
- 평행 투영 변환
glMatrixMode(GL_PROJECTION)
- P와 Q는 모두 동일한 지점에 투영됨
> 평행 투영 후에는 P의 z값을 복구할 수 없음
# View Volume
- 카메라에 의해 정의된 보기 3D 공간이며 내부 객체는 화면에 잘리고 투영되며 래스터화 됨
> near and far clipping planes (front and back planes)
glOrtho(left, right, bottom, top, near, far)
- left, right: x
- bottom, top: y
- near, far: vcs의 orgin으로부터의 거리
> -1을 곱함으로써 z 좌표를 알 수 있음
# Normalized View Volume
- NVV: 정규화 가시 부피
> 사용자 정의 VV가 크기가 2인 단위 큐브인 정규화된 VV로 확장됨
> 왼손 좌표계를 사용하며 z축이 반전됨 (CCS) : LHS
> clipping coordinate system
- Why use NVV
> 투영 방법에 상관없이 clipping 계산이 쉬움
> 다양한 viewports로 변환하기 쉬움
# RHCS vs. LHCS
- Right-handed CS
> 회전 방향: CCW
> OpenGL NVV 이전
- Left-hand CS
> 회전 방향: CW
> OpenGL NVV 이후
> unity
# NVV Transformation
(1) translate: VCS center [(r+l)/2, (t+b)/2, -(f+n)/2] to CCS orgin [0, 0, 0]
(2) scale: width (r-l), height (t-b), depth (f-n) to 2 → 단위 부피 2로 변환
(3) reflect: z축 반사
- ex) Translation: L = -1, R = 5
> -(L+R)/2 : -2 → 왼쪽으로 2칸 이동
- ex) scaling on x-axis
> 2/(R-L) → 1/3으로 줄임
# GL Perspective Projection
# View Frustum
- 절두체: 원근 투영에서의 가시 부피
# Pespective Projection
# View Volume
- view volume별로 clipping함
> 뷰 볼륨 조절로 객체 poping 효과
# View Frustum to NVV
glutFrustum(left, right, bottom, top, near, far) # 원근 투영에서 사용
- clipping 계산이 용이하도록 NVV로 변환
- glFrustum
> z축과 평행잉 아닐 수도 있음
(a)→(b): 중심을 z축과 정렬하는 밀림(shearing) 변환
> [(r+l/2, (t+B)/2,-n] ~ [0, 0, -n]
(b)→(c): 평면을 정사각형(2n*2n)으로 만드는 스케일 변환
> [(r-l)/2, (t-b)/2, -n] →[n, n, -n]
(c)→(d): 정규화된 VV로의 원근 변환
# NVV Transformation Matrix
- shearing(Sh)
- scaling(S)
- perspective transformation(T)
# Perspective Transformation
- perspective projection effect
- perspective transformation matrix (T)
> Z 값이 원근 변환에 의해 영향을 받음
- 비선형 변환으로 인해 거리 간격이 점차 줄어듦
- z-buffer 처리 개선을 위해 전면 clipping 평면에 가까운 곳에 개체를 배치
- 그래프: 상이 맺히는 위치를 나타냄
# gluPerspective
gluPerspective(FOV,aspect,near,far)
- FOV: Y축의 시야각(0~180도)
- Aspect: w/h
- near, far: 원점에서 양수 거리
- glFrustum과 달리 z축에 대칭
# OpenGL Pipeline
- object의 정점의 좌표가 계쏙 다른 좌표계로 변환이 일어나는 과정
# Viewport Transformation
- Perspective Division (원근 분할)
> NDCS: Normalized Device Coordinate System
> 투영 변환 후 정점 좌표는 원점을 보존하기 위해 homogeneous coordinate로 정규화됨
> (x, y, z, w) → (x/w, y/w, z/w, 1)
- Viewport Transformation
> NDCS에서 SCS로 이동
> SCS: screen coordinate system
glviewport(left, bottom, width, height)
- Viewport transformation은 visibility calculation을 위해 z 값을 보존함
# View Volume vs. Viewport
# Multiple Viewports
'Study > Computer Graphics' 카테고리의 다른 글
[CG] 4. Geometry Transformation (0) | 2021.10.13 |
---|---|
[CG] 3-2. OpenGL Event Handling (0) | 2021.10.08 |
[CG] 3-1. Graphic Library (0) | 2021.10.06 |
[CG] 2-2. Color Models (0) | 2021.10.04 |
[CG] 2-1. Graphics System (0) | 2021.09.20 |