1 / 36

Lecture #8

Lecture #8. 제 5 장 . 관측 (viewing). 강의 내용. 합성 카메라 객체들을 3 차원 공간상에 명시 하는 방법 : 제 4 장 카메라 묘사 방법 : 제 5 장 관측 과정 1 단계 세계 프레임  카메라 프레임으로의 변환 : 모델 - 관측 행렬 ( 정규 관측 절차의 개념 ) 2 단계 투영의 종류 , 관측 공간 : 투영 행렬. 고전적 관측과 컴퓨터 관측. 컴퓨터 관측에서는 객체 , 관측자 , 투영면 들이 독립적으로 명시한다

toby
Download Presentation

Lecture #8

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Lecture #8 제 5 장. 관측(viewing)

  2. 강의 내용 • 합성 카메라 • 객체들을 3차원 공간상에 명시 하는 방법 : 제 4 장 • 카메라 묘사 방법 : 제 5 장 • 관측 과정 • 1 단계 • 세계 프레임  카메라 프레임으로의 변환 : 모델-관측 행렬 (정규 관측 절차의 개념) • 2 단계 • 투영의 종류, 관측 공간 : 투영 행렬

  3. 고전적 관측과 컴퓨터 관측 • 컴퓨터 관측에서는 객체, 관측자, 투영면 들이 독립적으로 명시한다 • 고적적 관측에서는 이들간의 특정관계를 정해 줌으로써 다양한 관측방법이 정의한다 고전적 관측을 살펴봄으로써 관측의 개념을 파악

  4. 관측의 기본 요소 객체 투영선(직선) 투영면 (평면) 투영중심(COP) 투영 중심 : 렌즈의 중심, 카메라 프레임의 원점

  5. 객체 투영선 투영면 투시 관측과 평행관측 • 투시(perspective) 관측 • COP가 유한 거리에 있는 경우, 원근법 적용 • 평행 관측 • COP 무한 거리에 있으면 DOP(Direction of Projection)가 된다

  6. 고전적 관측 전정면 정면경사 평면경사 등축 일점투시 삼점투시 고전적 관측들

  7. 고전적 관측 • 고전적 관측에는 주면(principal face)라는 개념이 존재 • 평행 투영 • 직교투영 : 투영면이 하나의 주면에 평행 • 축측투영 • 등축 투영 : 투영면이 세 개의 주면에 대칭 • 이축 투영 : 투영면이 두 개의 주면에 대칭 • 삼축 투영 : 일반적인 경우 • 경사투영 • 투시투영 • 일점 투시 • 이점 투시 • 삼점 투시

  8. 직교투영 직교 투영 • 투영면이 하나의 주면에 평행 • 투영선이 투영면에 수직 • 거리와 각이 보존 • 제도 작업에 적합

  9. 신전과 세 개의 다중관측 직교 투영들 다중관측 직교 투영 • 투영면이 하나의 주면에 평행 • 이미지로부터 형상을 얻기가 쉽지 않다

  10. 투영면 투영면 투영면 (a) 축측 투영의 구성 (b)평면도 (c) 측면도 축측 투영 • 투영면이 객체에 대하여 임의의 방향에 존재 • 투영선은 투영면에 수직

  11. 이축 삼축 등축 축측 관측들 축측 관측의 종류 • 등축(isometric) : 세 주면 방향으로의 축소비가 같음 • 이축(dimetric) : 두 주면 방향으로의 축소비가 같음 • 삼축(trimetric) : 세 주면 방향으로의 축소비가 다름

  12. 투영면 투영면 투영면 (a)경사투영의 구성 (b)평면도 (c) 측면도 경사 투영 • 투영선이 투영면과 임의의 각을 가진다 • 투영면과 평행한 주면의 각이 보존

  13. 투시관측 투시 투영

  14. (a) 삼점투시 (b) 이점투시 (c) 일점투시 투시 투영의 종류 소실점 두 축방향이 투영면에 평행

  15. 카메라의 위치지정 • 카메라 프레임의 위치지정 • OpenGL에서의 초기 카메라 • 세계 프레임의 원점에 위치 • 방향은 –z 방향이라고 가정

  16. 방법 1: 모델-관측 행렬에 변환 적용(1) 모델-관측 행렬 = C일 때 새로이 q에 정의된 정점 : 세계 프레임 : q 카메라 프레임 : Cq q = (0,0,0) 카메라가 앞으로 d 만큼 이동 Cq = (0,0,-d) 정점 p는 두 프레임에서 동일

  17. 방법 1: 모델-관측 행렬에 변환 적용(2) • 객체를 양의 x축 상에서 보고자 하는 경우 1. 뒤로 이동카메라를 이동 2. y축 중심으로 회전 glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef(0.0, 0.0, -d); glRotatef(-90.0, 0.0, 1.0, 0.0); 사용하기가 쉽지 않다

  18. Look-at 위치지정 방법 2: looking-at에 의한 방법 gluLookAt(eyex,eyey,eyez, atx,aty,atz, upx,upy,upz); 세계 프레임에서의 좌표 OpenGL 유틸리티 함수가 모델-관측 행렬을 변경

  19. 화각(field of view) 단순한 투영들 • 카메라는 원하는 위치에 놓여졌다. • 이제 렌즈를 택하자 • 초점거리 • 화각 (fov) • 이미지 크기

  20. 두 종류의 카메라 필름

  21. 투영 변환 행렬 • 이제 투영에 대한 변환행렬을 유도하자. • 경우 1: 투시 투영 • 경우 2: 직교 투영 모델-관측 투 영 변환 파이프라인

  22. -d) -d) -d -d 투시 투영

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

  24. 동차 좌표를 이용한 투영 투시 투영 행렬

  25. 투영 파이프라인 모델-관측 투영 투시제산 투영 파이프라인

  26. 직교 투영 • 투영선이 관측 평면에 수직인 평행 투영 직교투영 행렬

  27. 화각 OpenGL에서의 투영 • 앞의 단순한 투영에서 고려하지 않은 사항 • 관측 공간 • 관측공간 외부의 것은 절단된다

  28. 관측 공간의 정의 절두체(frustrum)라 한다 관측공간 후절단면 전절단면 관측면 전후 절단면들

  29. OpenGL에서의 투시 투영 • 투시 관측을 위한 두개의 함수 • glFrustrum(left, right, bottom, top, near, far); • gluPerspective(fovy, aspect, near, far); 전면 윈도우의 영역 • 양수 • COP로부터의 거리 화각 종횡비

  30. glFrustrum() API • glMatrixMode(GL_PROJECTION); • glLoadIdentity(); • glFrustum(xmin,xmax,ymin,ymax,zmin,zmax);

  31. w h 화각 aspect = 화각을 이용한 정의 gluPerspective() API gluPerspective(fovy,aspect,near,far);

  32. glOrtho(xmin,xmax,ymin,ymax,zmin,zmax); 관측공간 OpenGL에서의 평행 관측 양수일 필요가 없다 • 직교 관측 함수만 제공

  33. 은면 제거 (1) 투영 관측공간 내의 다각형들 이미지 평면 내의 다각형들 어느 다각형을 투영해야 하는가?

  34. 은면 제거 (2) • 두 가지 알고리즘 • 객체 공간 알고리즘 • 이미지 공간 알고리즘 예) z-버퍼 (깊이버퍼) 알고리즘 • OpenGL API • z-버퍼 사용의 선택 • z-버퍼의 클리어 glutInitDisplayMode(GLUT_DEPTH, …) glEnable(GL_DEPTH_TEST); glClear(GL_DEPTH_BUFFER_BIT);

  35. 장면 안에서의 카메라 움직임 (1) 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(); }

  36. 장면 안에서의 카메라 움직임 (2) 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); }

More Related