Fascination
article thumbnail
Published 2021. 10. 19. 19:41
[CG] 5. Projection Study/Computer Graphics

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: 투상선이 평행 → 물체가 동일한 사이즈로 투영이 됨

  > 크기 그리고 물체의 투상선은 투영 이후에도 유지됨

Parallel Projection

 

 

# Orthographic Projection

- 투영 평면이 주 평면 중 하나와 평행 (x-y, y-z, z-x)

  > 주평면: 두 축이 이루는 면

- 정면, 측면, 상단 뷰

- 프로젝터가 투영 평면에 직교

- 객체의 길이가 보존됨; 제한된 보기 위치; 건축 청사진에 사용됨

  > 단점: 항상 세가지의 view(평면도, 정면도, 좌측면도)만 볼 수 있음 따라서 여러 view를 동시에 볼 수 없음

Orthographic Projection

 

 

# Axonometric Projection

- 축측 투영

  > 투상면은 어느 주평면과도 평행하지 않음

  > 투상선은 투상면과 직교

- 객체의 여러 측면 보기를 제공

- 투영면과 주 평면 사이의 교차각의 Homogeneity

  > isometric: 모든 각이 같음

  > dimetric: 2개의 각이 같음

  > trimetric: 각이 다 다름

Axonometric Projection(1)

 

Axonometric Projection(2)

 

 

# Oblique Projection

- 경사 투영

  > 투영선이 서로 평행하며, 투영 평면(또는 시선)에는 직교하지 않음

Oblique Projection

 

 

# Oblique Projection - Game

- 동시에 여러 방향을 볼 수 있으며 입체감을 줌

- 2D → 경사 투영 → 3D 느낌을 줄 수 있음

Oblique Projection - Game

 

 

# Perspective Projection

- 원근 투영

  > 시점은 유한한 거리에 위치

  > 투영선은 시각에서 퍼지게됨

  > 애니메이션이나 게임을 위해 사물의 원근감을 표현함 → 사실감을 줌

Perspective Projection

- depth feeling

  > 물체의 보이는 크기가 거리에 비례하여 변함

- vanish point: 소실점

  > 원근 투영의 결과로 평행선이 만나는 지점

  > 하나, 둘 , 세 개의 소멸점이 있음 → 가상 그래픽 상에서 여러개를 만들 수 있음

- Perspective transformation

  > 직선과 평면이 보존되어 있음 * 평면도 평면으로 유지가 됨

  > 꼭지점 간 거리 감소율을 증가시킴

Perspective transformation

 

 

# GL Parallel Projection

- 평행 투영 변환

glMatrixMode(GL_PROJECTION)

GL Parallel Projection

- P와 Q는 모두 동일한 지점에 투영됨

  > 평행 투영 후에는 P의 z값을 복구할 수 없음

GL Parallel Projection

 

 

# View Volume

- 카메라에 의해 정의된 보기 3D 공간이며 내부 객체는 화면에 잘리고 투영되며 래스터화 됨

  > near and far clipping planes (front and back planes)

View Volume

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로 변환하기 쉬움

Normalized View Volume

 

 

# 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로 변환

View Frustum to 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)

NVV Transformation Matrix

 

 

# Perspective Transformation

- perspective projection effect

perspective projection effect

- perspective transformation matrix (T)

  > Z 값이 원근 변환에 의해 영향을 받음

perspective transformation matrix

 

Perspective Transformation

- 비선형 변환으로 인해 거리 간격이 점차 줄어듦

- z-buffer 처리 개선을 위해 전면 clipping 평면에 가까운 곳에 개체를 배치

- 그래프: 상이 맺히는 위치를 나타냄

 

 

# gluPerspective

gluPerspective(FOV,aspect,near,far)

- FOV: Y축의 시야각(0~180도)

- Aspect: w/h

- near, far: 원점에서 양수 거리

- glFrustum과 달리 z축에 대칭

gluPerspective

 

 

# OpenGL Pipeline

- object의 정점의 좌표가 계쏙 다른 좌표계로 변환이 일어나는 과정

OpenGL Pipeline

 

 

# 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

Viewport Transformation

glviewport(left, bottom, width, height)

- Viewport transformation은 visibility calculation을 위해 z 값을 보존함

 

 

# View Volume vs. Viewport

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
profile

Fascination

@euna-319

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!