관 측 (Viewing)

Post on 03-Jan-2016

80 views 0 download

description

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

Transcript of 관 측 (Viewing)

1

관 측 관 측 (Viewing)(Viewing)

관측 관측 (Viewing)(Viewing)

2

관측의 개요관측의 개요

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

관측 과정 1 단계

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

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

관측 관측 (Viewing)(Viewing)

3

관 측 관 측 (Viewing)(Viewing)

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

관측 관측 (Viewing)(Viewing)

4

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

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

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

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

관측 관측 (Viewing)(Viewing)

5

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

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

관측 관측 (Viewing)(Viewing)

6

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

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

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

관측 관측 (Viewing)(Viewing)

7

고전적 관측고전적 관측

관측 관측 (Viewing)(Viewing)

8

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

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

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

경사투영

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

관측 관측 (Viewing)(Viewing)

9

직교투영직교투영

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

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

관측 관측 (Viewing)(Viewing)

10

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

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

관측 관측 (Viewing)(Viewing)

11

축측 투영축측 투영

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

관측 관측 (Viewing)(Viewing)

12

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

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

관측 관측 (Viewing)(Viewing)

13

경사 투영경사 투영

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

관측 관측 (Viewing)(Viewing)

14

투시 관측투시 관측

관측 관측 (Viewing)(Viewing)

15

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

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

관측 관측 (Viewing)(Viewing)

16

관 측 관 측 (Viewing)(Viewing)

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

관측 관측 (Viewing)(Viewing)

17

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

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

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

관측 관측 (Viewing)(Viewing)

18

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

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

세계 프레임에서

의 좌표

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

관측 관측 (Viewing)(Viewing)

19

관 측 관 측 (Viewing)(Viewing)

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

관측 관측 (Viewing)(Viewing)

20

화각 (field of view)

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

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

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

관측 관측 (Viewing)(Viewing)

21

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

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

경우 1: 투시 투영

경우 2: 직교 투영

투 영모델 - 관측

관측 관측 (Viewing)(Viewing)

22

투시 투영투시 투영

dz

yz

dy

xz

dx

p

p

p

d)d)d

d

z

y

d

yz

x

d

x

p

p

관측 관측 (Viewing)(Viewing)

23

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

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

관측 관측 (Viewing)(Viewing)

24

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

),,( zyx ),,( ppp zyx

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

0100

0100

0010

0001

d

P투시 투영

행렬

관측 관측 (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

모델 -관측

모델 -관측

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

관측 관측 (Viewing)(Viewing)

26

직교 투영직교 투영

0

p

p

p

z

yy

xx

11000

0000

0010

0001

1

z

y

x

z

y

x

p

p

p

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

평행투영 행렬

관측 관측 (Viewing)(Viewing)

27

관 측 관 측 (Viewing)(Viewing)

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

관측 관측 (Viewing)(Viewing)

28

OpenGLOpenGL 에서의 투영에서의 투영

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

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

화각

관측 관측 (Viewing)(Viewing)

29

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

절두체(frustrum)

관측 관측 (Viewing)(Viewing)

30

OpenGLOpenGL 에서의 투시에서의 투시

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

far);

gluPerspective(fovy, aspect, near, far);

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

Field of View

Aspect Ratio

관측 관측 (Viewing)(Viewing)

31

glFrustrumglFrustrum

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

관측 관측 (Viewing)(Viewing)

32

gluPerspectivegluPerspective

화각

gluPerspective(fovy,aspect,near,far);

관측 관측 (Viewing)(Viewing)

33

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

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

직교 관측 함수만 제공

관측 관측 (Viewing)(Viewing)

34

관 측 관 측 (Viewing)(Viewing)

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

관측 관측 (Viewing)(Viewing)

35

은면 제거은면 제거

관측공간 내의다각형들

이미지 평면 내의다각형들

투영

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

관측 관측 (Viewing)(Viewing)

36

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

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

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

OpenGL z- 버퍼 사용의 선택

z- 버퍼의 클리어

glutInitDisplayMode(GLUT_DEPTH, …)

glEnable(GL_DEPTH_TEST);

glClear(GL_DEPTH_BUFFER_BIT);

관측 관측 (Viewing)(Viewing)

37

관 측 관 측 (Viewing)(Viewing)

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

관측 관측 (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();

}

관측 관측 (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);

}

관측 관측 (Viewing)(Viewing)

40

관 측 관 측 (Viewing)(Viewing)

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

관측 관측 (Viewing)(Viewing)

41

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

그림자 사실적 이미지의

중요한 요소

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

관측 관측 (Viewing)(Viewing)

42

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

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

투시 투영 행렬

원래의 위치로 이동

001

0

0100

0010

0001

ly

M

),,( lll zyxT

),,( lll zyxT

관측 관측 (Viewing)(Viewing)

43

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

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

ll

llp

p

ll

llp

yyy

zzzz

y

yyy

xxxx

/)(

0

/)(

관측 관측 (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();