44
1 관 관 관 관 (Viewing) (Viewing)

관 측 (Viewing)

Embed Size (px)

DESCRIPTION

관 측 (Viewing). 관측의 개요. 합성 카메라 객체들을 3 차원 공간상에 명시 하는 방법 카메라 묘사 방법 ( 관측 ) 관측 과정 1 단계 세계 프레임  카메라 프레임으로의 변환 : 모델 - 관측 행렬 ( 정규 관측 절차의 개념 ) 2 단계 투영의 종류 , 관측 공간 : 투영 행렬. 관 측 (Viewing). 고전적 관측과 컴퓨터 관측 카메라의 위치지정 단순한 투영들 OpenGL 에서의 투영 은면 제거 장면 내에서의 움직임 평행투영 행렬 투시투영 행렬 - PowerPoint PPT Presentation

Citation preview

Page 1: 관 측  (Viewing)

1

관 측 관 측 (Viewing)(Viewing)

Page 2: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

2

관측의 개요관측의 개요

합성 카메라 객체들을 3 차원 공간상에 명시 하는 방법 카메라 묘사 방법 ( 관측 )

관측 과정 1 단계

• 세계 프레임 카메라 프레임으로의 변환 : 모델 - 관측 행렬 ( 정규 관측 절차의 개념 )

2 단계 • 투영의 종류 , 관측 공간 : 투영 행렬

Page 3: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

3

관 측 관 측 (Viewing)(Viewing)

고전적 관측과 컴퓨터 관측 카메라의 위치지정 단순한 투영들 OpenGL 에서의 투영 은면 제거 장면 내에서의 움직임 평행투영 행렬 투시투영 행렬 투영과 그림자

Page 4: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

4

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

컴퓨터 관측에서는 객체 , 관측자 , 투영면 들이 독립적으로 명시되는데 반해서

고적적 관측에서는 이들간의 특정관계를 정해 줌으로써 다양한 관측방법이 정의됨

고전적 관측을 살펴봄으로써 관측의 개념을 파악

Page 5: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

5

관측의 기본 요소관측의 기본 요소

투영 중심 : 렌즈의 중심 , 카메라 프레임의 원점

Page 6: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

6

투시 관측과 평행관측투시 관측과 평행관측

투시 (perspective) 관측 COP 가 유한 거리에 있는 경우 , 원근법 적용

평행 관측 COP 가 무한 거리에 있으면 DOP(Direction of Projection) 가 됨

Page 7: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

7

고전적 관측고전적 관측

Page 8: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

8

고전적 관측 고전적 관측 (con’t)(con’t)

고전적 관측에는 주면 (principal face) 라는 개념이 존재평행 투영 직교투영 : 투영면이 하나의 주면에 평행 축측투영

• 등축 투영 : 투영면이 세 개의 주면에 대칭• 이축 투영 : 투영면이 두 개의 주면에 대칭• 삼축 투영 : 일반적인 경우

경사투영

투시투영 일점 투시 이점 투시 삼점 투시

Page 9: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

9

직교투영직교투영

투영면이 하나의 주면에 평행투영선이 투영면에 수직

거리와 각이 보존제도 작업에 적합

Page 10: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

10

다중관측 직교 투영다중관측 직교 투영

투영면이 하나의 주면에 평행 이미지로부터 형상을 얻기가 쉽지 않음

Page 11: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

11

축측 투영축측 투영

투영면이 객체에 대하여 임의의 방향에 존재 투영선은 투영면에 수직

Page 12: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

12

축측 관측의 종류축측 관측의 종류

등축 (isometric) : 세 주면 방향으로의 축소비가 같음 이축 (dimetric) : 두 주면 방향으로의 축소비가 같음 삼축 (trimetric) : 세 주면 방향으로의 축소비가 다름

Page 13: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

13

경사 투영경사 투영

투영선이 투영면과 임의의 각을 가짐 투영면과 평행한 주면의 각이 보존

Page 14: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

14

투시 관측투시 관측

Page 15: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

15

투시 관측의 종류투시 관측의 종류

두 축 방향이 투영면에 평행소실점

Page 16: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

16

관 측 관 측 (Viewing)(Viewing)

고전적 관측과 컴퓨터 관측 카메라의 위치지정 단순한 투영들 OpenGL 에서의 투영 은면 제거 장면 내에서의 움직임 평행투영 행렬 투시투영 행렬 투영과 그림자

Page 17: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

17

카메라의 위치지정카메라의 위치지정

카메라 프레임의 위치지정 OpenGL 에서의 초기 카메라

• 세계 프레임의 원점에 위치• 방향은 – z 방향이라고 가정

Page 18: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

18

Look-AtLook-At 에 의한 방법에 의한 방법

gluLookAt(eyex,eyey,eyez, atx,aty,atz, upx,upy,upz);

세계 프레임에서

의 좌표

OpenGL 유틸리티 함수가 모델 - 관측 행렬을 변경

Page 19: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

19

관 측 관 측 (Viewing)(Viewing)

고전적 관측과 컴퓨터 관측 카메라의 위치지정 단순한 투영들 OpenGL 에서의 투영 은면 제거 장면 내에서의 움직임 평행투영 행렬 투시투영 행렬 투영과 그림자

Page 20: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

20

화각 (field of view)

단순한 투영들단순한 투영들

카메라는 원하는 위치에 놓여졌다 .

이제 렌즈를 택하자 초점거리 화각 (fov) 이미지 크기

Page 21: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

21

단순한 투영들 단순한 투영들 (con’t)(con’t)

이제 투영에 대한 변환행렬을 유도하자 .

경우 1: 투시 투영

경우 2: 직교 투영

투 영모델 - 관측

Page 22: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

22

투시 투영투시 투영

dz

yz

dy

xz

dx

p

p

p

d)d)d

d

z

y

d

yz

x

d

x

p

p

Page 23: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

23

투시 투영의 특성투시 투영의 특성

직선을 보존어파인 변환이 아님 ( 평행선이 유지되지 않음 )비선형투영된 위치로부터 원래의 위치로 역변환할 수 없음

Page 24: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

24

동차 좌표를 이용한 투영동차 좌표를 이용한 투영

),,( zyx ),,( ppp zyx

)1,,,( zyx ),,,( hzyx P

0100

0100

0010

0001

d

P투시 투영

행렬

Page 25: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

25

투영 파이프라인투영 파이프라인

11

z

dz

d

10100

0100

0010

0001

p

p

p

z

y

x

d

y

x

dz

z

y

x

z

y

x

d

모델 -관측

모델 -관측

투영투영 투시제산투시제산

Page 26: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

26

직교 투영직교 투영

0

p

p

p

z

yy

xx

11000

0000

0010

0001

1

z

y

x

z

y

x

p

p

p

투영선이 관측 평면에 수직인 평행 투영

평행투영 행렬

Page 27: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

27

관 측 관 측 (Viewing)(Viewing)

고전적 관측과 컴퓨터 관측 카메라의 위치지정 단순한 투영들 OpenGL 에서의 투영 은면 제거 장면 내에서의 움직임 평행투영 행렬 투시투영 행렬 투영과 그림자

Page 28: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

28

OpenGLOpenGL 에서의 투영에서의 투영

앞의 단순한 투영에서 고려하지 않은 사항 관측 공간

• 관측공간 외부의 것은 절단됨

화각

Page 29: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

29

관측 공간의 정의관측 공간의 정의

절두체(frustrum)

Page 30: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

30

OpenGLOpenGL 에서의 투시에서의 투시

투시 관측을 위한 두개의 함수 glFrustrum(left, right, bottom, top, near,

far);

gluPerspective(fovy, aspect, near, far);

전면 윈도우의 영역 -양수- COP 로부터의 거리

Field of View

Aspect Ratio

Page 31: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

31

glFrustrumglFrustrum

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

Page 32: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

32

gluPerspectivegluPerspective

화각

gluPerspective(fovy,aspect,near,far);

Page 33: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

33

OpenGLOpenGL 에서의 평행 관측에서의 평행 관측

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

직교 관측 함수만 제공

Page 34: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

34

관 측 관 측 (Viewing)(Viewing)

고전적 관측과 컴퓨터 관측 카메라의 위치지정 단순한 투영들 OpenGL 에서의 투영 은면 제거 장면 내에서의 움직임 평행투영 행렬 투시투영 행렬 투영과 그림자

Page 35: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

35

은면 제거은면 제거

관측공간 내의다각형들

이미지 평면 내의다각형들

투영

어느 다각형을 투영해야 하는가 ?

Page 36: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

36

은면 제거 은면 제거 (con’t)(con’t)

두 가지 알고리즘 객체 공간 알고리즘 이미지 공간 알고리즘

예 ) z- 버퍼 ( 깊이버퍼 ) 알고리즘

OpenGL z- 버퍼 사용의 선택

z- 버퍼의 클리어

glutInitDisplayMode(GLUT_DEPTH, …)

glEnable(GL_DEPTH_TEST);

glClear(GL_DEPTH_BUFFER_BIT);

Page 37: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

37

관 측 관 측 (Viewing)(Viewing)

고전적 관측과 컴퓨터 관측 카메라의 위치지정 단순한 투영들 OpenGL 에서의 투영 은면 제거 장면 내에서의 움직임 평행투영 행렬 투시투영 행렬 투영과 그림자

Page 38: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

38

장면 안에서의 움직임장면 안에서의 움직임void keys(unsigned char key, int x, int y){ 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();}

void display(void)

{

glClear(GL_COLOR_BUFFER_BIT |

GL_DEPTH_BUFFER_BIT);

glLoadIdentity();

gluLookAt(viewer[0], viewer[1], viewer[2],

0.0, 0.0, 0.0,

0.0, 1.0, 0.0);

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 39: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

39

장면 안에서의 움직임 장면 안에서의 움직임 (con’t)(con’t)

void myReshape(int w, int h){

glViewport(0,0,w,h);glMatrixMode(GL_PROJECTION);glLoadIdentity();if(w<=h) glOrtho(-2.0, 2.0, -2.0*(GLfloat) h / (GLfloat) w,

2.0*(GLfloat) h / (GLfloat) w, -10.0, 10.0);else

glOrtho(-2.0*(Glfloat) w / (Glfloat) h, 2.0*(Glfloat) w / (Glfloat) h,

-2.0, 2.0, -10.0, 10.0);glMatrixMode(GL_MODELVIEW);

}

Page 40: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

40

관 측 관 측 (Viewing)(Viewing)

고전적 관측과 컴퓨터 관측 카메라의 위치지정 단순한 투영들 OpenGL 에서의 투영 은면 제거 장면 내에서의 움직임 평행투영 행렬 투시투영 행렬 투영과 그림자

Page 41: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

41

투영과 그림자투영과 그림자

그림자 사실적 이미지의

중요한 요소

광원의 위치를 투영의 중심으로 하여 그림자가 나타나는 평면에 투영을 수행

Page 42: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

42

투영과 그림자 투영과 그림자 (con’t)(con’t)

광원의 위치를 원점으로 이동

투시 투영 행렬

원래의 위치로 이동

001

0

0100

0010

0001

ly

M

),,( lll zyxT

),,( lll zyxT

Page 43: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

43

투영과 그림자 투영과 그림자 (con’t)(con’t)

앞의 세 행렬에 의하여 정점 (x, y, z) 는 다음 위치로 변환

ll

llp

p

ll

llp

yyy

zzzz

y

yyy

xxxx

/)(

0

/)(

Page 44: 관 측  (Viewing)

관측 관측 (Viewing)(Viewing)

44

투영과 그림자 투영과 그림자 (con’t)(con’t)

GLfloat m[16];

for(i=0;i<16;i++) m[i]=0.0;

m[0]=m[5]=m[10]=1.0;

m[7]=-1.0/yl

glColor3f(1.0, 0.0, 0.0); /* 객체 색 */

glBegin(GL_POLYGON);

glEnd();

glMatrixMode(GL_MODEL_VIEW);

glPushMatrix();

glTranslatef(xl, yl, zl);

glMultMatrixf(m);

glTranslatef(-xl, -yl, -zl);

glColor3f(0.0,0.0,0.0); /* 그림자 색 */

glBegin(GL_POLYGON);

… /* 다각형을 다시 그린다 */

glEnd();

glPopMatrix();