제 5 장 관측

92
제 5 제 제제 제제제제제제제 제 제제

Upload: lilly

Post on 05-Jan-2016

141 views

Category:

Documents


0 download

DESCRIPTION

제 5 장 관측. 정보통신공학부 송 창근. 관측의 두 부분. 모델 - 관측 행렬 객체들을 원점에 카메라가 위치한 프레임 상의 표현으로 전환함 정규 관측 절차의 사용이 가능 투영행렬 어떤 종류의 투영을 할지를 결정 : 평행투영 혹은 투시 투영 세계의 어떤 부분의 이미지를 얻을 지 결정 : 절단 , 관측 공간. 5.1 고전적 관측과 컴퓨터 관측. 객체. 투영선. 투영면. 그림 5.1 관측. 합성 카메라 모형. 객체 관측자 투영선 : 직선 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 제  5  장 관측

제 5 장 관측

정보통신공학부 송 창근

Page 2: 제  5  장 관측

관측의 두 부분• 모델 - 관측 행렬

– 객체들을 원점에 카메라가 위치한 프레임 상의 표현으로 전환함

– 정규 관측 절차의 사용이 가능• 투영행렬

– 어떤 종류의 투영을 할지를 결정 : 평행투영 혹은 투시 투영

– 세계의 어떤 부분의 이미지를 얻을 지 결정 : 절단 , 관측 공간

Page 3: 제  5  장 관측

그림 5.1 관측

5.1 고전적 관측과 컴퓨터 관측

투영면

투영선

객체

Page 4: 제  5  장 관측

합성 카메라 모형• 객체• 관측자• 투영선 : 직선• 투영의 중심 (COP, Center of

Projection)– 카메라 혹은 눈의 중심– 카메라 프레임의 원점 ( 그래픽스 시스템 )

• 투영면 : 평면

Page 5: 제  5  장 관측

투영의 방향• COP ( 투영의 중심 )

– COP 가 유한함 . 투영선이 한 점으로 만남 .– 투시 관측

• DOP ( 투영의 방향 ), Direction of Projection– COP 가 무한의 위치로 이동하면 , 투영선이

서로 평행하여진다 .– 평행관측

Page 6: 제  5  장 관측

그림 5.2 투영중심을 무한대로 옮김

평행관측

Page 7: 제  5  장 관측

평면 기하 투영• 투영면이 평면이고 투영선이 직선인

경우• 투시 투영과 평행 투영은 직선은

보존되지만 각도는 일반적으로 보존되지 않는다 .

Page 8: 제  5  장 관측

컴퓨터 그래픽스 시스템• 컴퓨터 그래픽스 시스템

– 평행 관측 (Orthographic Parallel Viewing)

– 투시 관측 (Perspective Viewing)

• 고전적 관측– 다중 관측 정사 투영– 1 점 , 2 점 , 3 점 투시

Page 9: 제  5  장 관측

그림 5.3 고전적 관측들

5.1.1 고전적 관측

정면경사

평면경사

등축

일점투시

삼점투시

Page 10: 제  5  장 관측

평면기하투영의 분류

Page 11: 제  5  장 관측

그림 5.4 직교 투영

5.1.2 직교 투영 (Orthographic Projection)

Page 12: 제  5  장 관측

직교 투영• 투영선은 투영면에 수직이다 .• 다중 관측 직교 투영에서 투영면은 객체의

주면 (principal face) 중 하나와 평행하다 .• 그림 5.5 : 세 개의 다중관측 직교 투영들

• 직교 투영으로부터 관측자가 객체의 형상을 그려볼 수 있기 위해서는 세 개 이상의 관측이 필요하다

• 거리와 각이 보존된다 .

Page 13: 제  5  장 관측

그림 5.5 신전과 세 개의 다중관측 직교 투영들

그림 5.5 다중 관측 직교 투영들

Page 14: 제  5  장 관측

5.1.3 측측 투영 (axonometric projection)

• 투영선은 투영면에 수직이지만 , 투영면은 객체에 대해 어느 방향에도 존재할 수 있다 . 즉 , 어떤 기본측과도 투영면이 수직하지 않음 .

• 만일 투영면이 사각형 객체의 모서리에 만날 때 .( 그림 5.7)

-등축관측 (isometric view) : 세개의 주면에 대하여 대칭으로 놓여지면

-이축관측 (dimetric view) : 두 개의 주면에 대칭으로 놓인 경우

-삼축 관측 : 일반적인 경우

• 길이가 일정하게 축소됨 . 따라서 길이 계산이 가능-등축은 1 개의 축소비

-삼측 관측은 3 개의 축소비

• 평행선들이 이미지 안에서 보존되나 , 각은 그렇치 않다

Page 15: 제  5  장 관측

그림 5.6 (a) 축측 투영의 구성 (b) 평면도 (c) 측면도

5.1.3 측측 투영 (axonometric projection)

Page 16: 제  5  장 관측

그림 5.7 축측 관측들

그림 5.7 축측 관측들

이축 삼축 등축

Page 17: 제  5  장 관측

5.1.4 경사 투영 (oblique projection)

• 투영선과 투영면은 일정한 각을 가진다 .

• 투영면에 평행한 면 내의 각은 보존된다 .

Page 18: 제  5  장 관측

그림 5.8 (a) 경사투영의 구성 (b) 평면도 (c) 측면도

5.1.4 경사 투영 (oblique projection)

Page 19: 제  5  장 관측

그림 5.9 투시관측

5.1.5 투시 ( 원근 ) 관측 (Perspective Projection)

Page 20: 제  5  장 관측

투시관측• 객체가 관측자로부터 멀어질수록 그 크기가

줄어든다 .• 길이 측정이 불가능하다 .• 건축분야 , 애니메이션 등 실감나는 영상이

중요한 분야에 사용

Page 21: 제  5  장 관측

일점 , 이점 , 삼점 투시

• 객체의 세 가지 주방향 가운데 얼마나 많은 방향이 투영면에 평행한가에 따라서 일점 , 이점 , 삼점 투시로 구별된다 .

• 일점투시 : 두 개의 주 방향이 투영면에 평행하고 하나의 소실점이 존재

• 이점투시 : 하나의 주 방향이 투영면에 평행하고 , 두 개의 소실점이 존재

• 삼점투시 : 3 개의 주 방향에 평행한 모든 직선들은 3 개의 소실점에서 만난다 .

Page 22: 제  5  장 관측

이점 투시 투영

Page 23: 제  5  장 관측

그림 5.10 (a) 삼점 투시 (b) 이점투시 (c) 일점 투시

그림 5.10 일점 , 이점 , 삼점 투시

Page 24: 제  5  장 관측

그림 5.11 초기 카메라 위치

5.2 카메라의 위치지정

Page 25: 제  5  장 관측

(a) 초기상태 (b) 모델 - 관측 행렬의 변경 후

그림 5.12 카메라와 세계프레임의 이동

Page 26: 제  5  장 관측

그림 5.13 카메라의 위치 지정

그림 5.13

glMatrixMode(GL_MODELVIEW);glLoadIdentity();glTranslatef(0.0, 0.0, -d);glRotatef(-90.0, 0.0, 1.0, 0.0);

Page 27: 제  5  장 관측

그림 5.14 카메라의 프레임

5.2.2 관측 APIPHIGS

GKS-3DView Reference point(VRP)

View Plane Normal (VPN)

View-Up Vector (VUP)

Page 28: 제  5  장 관측

set_view_plane_normal(nx, ny, nz);: VPN 은 투영면 즉 , 카메라의 후면의 방향

set_view_up(ux, uy, uz);: VPN 만 주어졌을 때 평면 위에 카메라의

뒷면을 대고 마음대로 회전시킬 수 있다 . VUP 는 이러한 카메라를 고정시킨다 .

Page 29: 제  5  장 관측

그림 5.15 관측 상향 벡터의 결정

그림 5.15

Page 30: 제  5  장 관측

OpenGL 에서 사용

5.2.3 Look-At 함수

Page 31: 제  5  장 관측

gluLookAt 함수

• gluLookAt(eyex, eyey, eyez, atx, aty, atz, upx, upy, upz);- 카메라의 위치에 따라 모델 - 관측 행렬을 변경한다 .

• 카메라의 위치를 시점이라고 한다 .

Page 32: 제  5  장 관측

그림 5.17 횡전 , 종전 , 편요

5.2.4 기타 관측 API

Page 33: 제  5  장 관측

기타 관측 API

횡전 (Roll) : z 축을 중심으로 회전 종전 (pitch) : x 축을 중심으로 회전편요 (yaw) : y 축을 중심으로 회전

앙각 (elevation)방위각 (azimuth)꼬임각 (twist angle)

Page 34: 제  5  장 관측

그림 5.18 앙각과 방위각

앙각

방위각

극좌표계

Page 35: 제  5  장 관측

5.3 단순한 투영도광학 컴퓨터 그래픽스

카메라의 위치렌즈와 필름의 크기

카메라의 위치투영의 종류

광각렌즈망원렌즈

평행투영과 유사투시관측

Page 36: 제  5  장 관측

5.3.1 투시 투영• 카메라의 위치 : 원점• 카메라의 방향 : -z 축 방향

Page 37: 제  5  장 관측

(a) 대부분의 실제적인 상황

(b) 보다 일반적인 상황

카메라의 뒷면이 정면에 대하여 임의의 방향도 가질 수 있다 .

그림 5.19 두 대의 카메라

Page 38: 제  5  장 관측

투시 변환• 투시 변환 (perspective transformation)

• 역변환 ( 투영의 위치로부터 원래의 위치로 ) 할 수 없다 .

• 직선은 보존되지만 affine 변환은 아니다 .

• 동치 좌표계 ( 주로 w=1 인 경우를 사용한다 .

),,(),,( ppp zyxzyx

),,,(),,( wwzwywxzyx

Page 39: 제  5  장 관측

(a) 삼차원 관측 (b) 평면도 (c) 측면도

그림 5.20 투시투영의 세 관측들

dzx

x

d

x

z

x

p

p

dzy

y

d

y

z

y

p

p

Page 40: 제  5  장 관측

dzx

x

d

x

z

x

p

p

dzy

y

d

y

z

y

p

p

비균일 축소 (nonuniform foreshortening)

z 로 나누어지므로 비균일 축소

Page 41: 제  5  장 관측

0100

0100

0010

0001

d

M

1

z

y

x

p

dz

z

y

x

qM 은 한점 를 로 변환한다

Page 42: 제  5  장 관측

p

p

p

zddz

z

ydz

y

xdz

x

투시제산

11

'p

p

p

z

y

x

ddz

ydz

x

q

Page 43: 제  5  장 관측

그림 5.21 투영 파이프라인

모델 - 관측 투영 투시제산

Page 44: 제  5  장 관측

5.3.2 직교 투영(orthographic)

• 투영선이 관측 평면에 수직인 평행 투영• 투시 투영 변환과 직교 투영 변환에

대해서 같은 pipeline 을 사용할 수 있지만 , 나눗셈은 불필요하다 .

Page 45: 제  5  장 관측

그림 5.22 직교투영

Page 46: 제  5  장 관측

0

p

p

p

z

yy

xx

11000

0000

0010

0001

1

z

y

x

z

y

x

p

p

p

Page 47: 제  5  장 관측

5.4 OpenGL 에서의 투영

Page 48: 제  5  장 관측

그림 5.23 관측 공간의 정의

화각

Page 49: 제  5  장 관측

그림 5.24 전후 전단면들

Page 50: 제  5  장 관측

5.4.1 OpenGL 에서의 투시glFrustum(xmin, xmax, ymin, ymax, zmin, zmax);

glMatrixMode(GL_PROJECTION);glLoadIdentity();glFrustum(xmin, xmax, ymin, ymax, zmin, zmax);

Page 51: 제  5  장 관측

그림 5.25 절두체의 정의

glFrustum(xmin, xmax, ymin, ymax, zmin, zmax);

Page 52: 제  5  장 관측

그림 5.26 화각을 이용한 지정

gluPerspective(fovy, aspect, near, far);

Page 53: 제  5  장 관측

5.4.2 OpenGL 에서의 평행관측

gluortho2D(xmin, xmax, ymin, ymax, zmin, zmax);

Page 54: 제  5  장 관측

그림 5.27 직교관측

gluortho2D(xmin, xmax, ymin, ymax, zmin, zmax);

Page 55: 제  5  장 관측

5.5 은면 제거• 은면 제거 알고리즘

(hidden-surface-removal algorithm)• 가시면 알고리즘

(visible-surface algorithm)• 객체 공간 알고리즘

(object-space algorithm)• 영상공간 알고리즘

(image-space algorithm)

Page 56: 제  5  장 관측

• 깊이 버퍼 (z-buffer)• gluInitDisplayMode(GLUT_DOUBLE | GLUT_DE

PTH | GLUT_RGB);gluEnable(GL_DEPTH_TEST);

• glClear(GL_DEPTH_BUFFER_BIT);

Page 57: 제  5  장 관측

그림 5.28 z- 버퍼 알고리즘

Page 58: 제  5  장 관측

5.6 장면 안에서의 움직임

Page 59: 제  5  장 관측

Void display(void){ glClear(GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT); /* Update viewer position in modelview matrix*/ glLoadIdentity(); gluLookAt(viewer[0],viewer[1],viewer[2], 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); /* rotate cube */ glRotatef(theta[0], 1.0, 0.0, 0.0); glRotatef(theta[1], 0.0, 1.0, 0.0); glRotatef(theta[2], 0.0, 0.0, 1.0); colorcube(); glFlush(); glutSwapBuffers(); }

Page 60: 제  5  장 관측

void keys(unsigned char key, int x, int y) { /* Use x, X, y, Y, z, and Z keys to move view

er */ if(key == 'x') viewer[0]-= 1.0; if(key == 'X') viewer[0]+= 1.0; if(key == 'y') viewer[1]-= 1.0; if(key == 'Y') viewer[1]+= 1.0; if(key == 'z') viewer[2]-= 1.0; if(key == 'Z') viewer[2]+= 1.0; display();}

Page 61: 제  5  장 관측

void myReshape(int w, int h){ glViewport(0, 0, w, h);

/* Use a perspective view */ glMatrixMode(GL_PROJECTION); glLoadIdentity();if(w<=h) glFrustum(-2.0, 2.0, -2.0 * (GLfloat) h/(GLfloat) w, 2.0* (GLfloat) h /(GLfloat) w, 2.0, 20.0);else

glFrustum(-2.0, 2.0, -2.0 * (GLfloat) w/ (GLfloat) h, 2.0* (GLfloat) w / (GLfloat) h, 2.0, 20.0);/* Or we can use gluPerspective */ /* gluPerspective(45.0, w/h, -10.0, 10.0); */ glMatrixMode(GL_MODELVIEW);

}

Page 62: 제  5  장 관측

5.7 평행 투영 행렬

Page 63: 제  5  장 관측

5.7.1 투영 정규화• 투영 정규화 (projection normalization)

이란 객체의 일반적인 투영을 구현할 때 , 객체를 왜곡시킨 후에 직교 투영으로 변환하는 방식이다 .

• 예를들면 , 투시 투영을 구현할 때 , 물체를 적당히 왜곡한 후에 직교 투영을 적용한다 .

Page 64: 제  5  장 관측

(a) 투시관측 (b) 왜곡된 객체의 직교 투영

그림 5.29 객체의 사전 왜곡

Page 65: 제  5  장 관측

그림 5.30 정규화 변환

왜곡 ( 정규화 ) 직교투영

일반적인 투영을 동일한 절단 공간을 갖는 직교 투영으로 바꾼다 . 직교 투영이 원하는 일반적인 투영과 같을 수 있도록 투영행렬에 의해 객체들을 왜곡시킴으로써 가능하다

Page 66: 제  5  장 관측

5.7.2 직교 투영 행렬

0

p

p

p

z

yy

xx

Page 67: 제  5  장 관측

1

1

1

z

y

xglMatrixMode(GL_PROJECTION);

glLoadIdentity();

glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);

정규관측 공간 (canonical view volume)

glOrtho(xmin, xmax, ymax, ymin, zmin, zmax);

디폴트 관측공간

Page 68: 제  5  장 관측

그림 5.31 관측공간을 정규관측공간으로 사상

• 투영행렬은 지정된 관측 공간을 정규 관측 공간으로 사상하는 4ⅹ4 행렬이다 .

• 지정된 관측 공간 내부 ( 외부 ) 의 점은 정규관측공간 내부 ( 외부 ) 의 점으로 변환된다 .

• 2 단계 과정 .

-이동변환을 통해 지정된 관측 공간의 중심을 정규관측공간의 중심 ( 원점 ) 으로 이동한다 .

- 지정된 관측 공간의 변의 길이가 2 가 되도록 크기 변환을 한다 .

Page 69: 제  5  장 관측

그림 5.32 정규화를 위한 어파인 변환

Page 70: 제  5  장 관측

관측공간을 정규관측공간으로 사상

))(2),(2),(2(

)2)(,2)(,2)((

minmaxminmaxminmax

minmaxminmaxminmax

zzyyxxS

zzyyxxT

Page 71: 제  5  장 관측

1000

200

02

0

002

minmax

minmax

minmax

minmax

minmax

minmax

minmax

minmax

minmax

zz

zz

zz

yy

yy

yy

xx

xx

xx

STP

투영행렬

현재 가정은 투영선은 z 축의 음의 무한대에서 원점을 향하는 것이었다 . 그러나 OpenGL 의 경우는 투영선이 무한한 양의 z 축에서 시작한다 . 따라서 , 반사 변환 S(1,1,-1) 이 추가된다 .

Page 72: 제  5  장 관측

1000

200

02

0

002

minmax

minmax

minmax

minmax

minmax

minmax

minmax

minmax

minmax

zz

zz

zz

yy

yy

yy

xx

xx

xx

STP

최종 투영행렬

Page 73: 제  5  장 관측

5.7.3 경사 투영

그림 5.33 경사투영

Page 74: 제  5  장 관측

그림 5.34 경사 절단공간

Page 75: 제  5  장 관측

그림 5.35 경사투영의 (a) 평면도와 (b) 측면도

pxx

z

tan

0

cot

cot

p

p

p

z

zyy

zxx

pyy

z

tan

Page 76: 제  5  장 관측

0

cot

cot

p

p

p

z

zyy

zxx

1000

0000

0cot10

0cot01

P

밀림변환 (shear)

Page 77: 제  5  장 관측

그림 5.36 밀림변환의 효과

왜곡된 입방체의 직교 투영은 왜곡되지 않은 입방체의 경사 투영과 같다 .

Page 78: 제  5  장 관측

1000

0100

0cot10

0cot01

1000

0000

0010

0001

),(

HPP orth

Page 79: 제  5  장 관측

1000

200

02

0

002

minmax

minmax

minmax

minmax

minmax

minmax

minmax

minmax

minmax

zz

zz

zz

yy

yy

yy

xx

xx

xx

T

정규관측 공간이 아니기 때문에 , 밀림변환 후 그리고 최종의 직교 투영을 하기 전에 다음의 변환을 해야 한다 .

),( HTPP orth

Page 80: 제  5  장 관측

5.8 투시 투영• 정규관측공간의 모습 • 투시 정규화 변환 (perspective

normalization transformation)– 투시투영을 직교투영으로 바꾸는 변환

• OpenGL 에서 사용되는 투시 행렬

Page 81: 제  5  장 관측

5.8.1 투시 정규화

0100

0100

0010

0001

M

Page 82: 제  5  장 관측

5.8.1 투시 정규화

0100

2200

0010

0001

N

관측공간의 측면들이 투여면을 45 도 교차하도록 함으로써 화각이 90 도로 고정한다 .

Page 83: 제  5  장 관측

그림 5.37 간단한 투시투영

Page 84: 제  5  장 관측

0100

0000

0010

0001

NM orth

z

y

x

NpMp orthp 0

Page 85: 제  5  장 관측

z

yy

z

xx

p

p

변환로의해에 1" " xz

xxzx

변환로의해에 1" " yz

yyzy

변환로의해에앞쪽면 0" )1

1(2")(1 zz

zz

변환로뒤쪽면 )1

1(2")(max

max zzzz

Page 86: 제  5  장 관측

그림 5.38 관측공간의 투시 정규화

Page 87: 제  5  장 관측

5.8.2 OpenGL 투시 변환

)2

,2

()cot,(cotmin

maxmin

min

maxmin

z

yy

z

xxHH

Page 88: 제  5  장 관측

min

max

min

minmax

min

minmax

2

2

zz

zz

z

yyy

z

xxx

1min

z

zy

zx

)1),(2,)(2( minminmaxminminmaxmin zyyzxxzS

Page 89: 제  5  장 관측

그림 5.38 Open GL 투시

Page 90: 제  5  장 관측

0100

00

0010

0001

Nz

zz

'

z

z

zz

zz

1

)('minmax

max

Page 91: 제  5  장 관측

0100

00

0010

0001

minmax

max

minmax

max

zz

z

zz

zN

Page 92: 제  5  장 관측

0100

200

02

0

002

minmax

minmax

minmax

minmax

minmax

minmax

minmax

min

minmax

minmax

minmax

min

zz

zz

zz

zzyy

yy

yy

zxx

xx

xx

z

NSHP