1 / 44

관 측 (Viewing)

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

basil-quinn
Download Presentation

관 측 (Viewing)

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

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

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

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

  5. 관측의 기본 요소 투영 중심 : 렌즈의 중심, 카메라 프레임의 원점

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

  7. 고전적 관측

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

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

  10. 다중관측 직교 투영 • 투영면이 하나의 주면에 평행 • 이미지로부터 형상을 얻기가 쉽지 않음

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

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

  13. 경사 투영 • 투영선이 투영면과 임의의 각을 가짐 • 투영면과 평행한 주면의 각이 보존

  14. 투시 관측

  15. 투시 관측의 종류 소실점 두 축 방향이 투영면에 평행

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

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

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

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

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

  21. 단순한 투영들 (con’t) • 이제 투영에 대한 변환행렬을 유도하자. • 경우 1: 투시 투영 • 경우 2: 직교 투영 모델-관측 투 영

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

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

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

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

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

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

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

  29. 관측 공간의 정의 절두체(frustrum)

  30. OpenGL에서의 투시 • 투시 관측을 위한 두개의 함수 • glFrustrum(left, right, bottom, top, near, far); • gluPerspective(fovy, aspect, near, far); 전면 윈도우의 영역 • 양수 • COP로부터의 거리 Field of View Aspect Ratio

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

  32. 화각 aspect = w/h gluPerspective gluPerspective(fovy,aspect,near,far);

  33. OpenGL에서의 평행 관측 • 직교 관측 함수만 제공 glOrtho(xmin,xmax,ymin,ymax,zmin,zmax);

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

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

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

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

  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(); }

  39. 장면 안에서의 움직임 (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); }

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

  41. 투영과 그림자 • 그림자 • 사실적 이미지의 중요한 요소 • 광원의 위치를 투영의 중심으로 하여 그림자가 나타나는 평면에 투영을 수행

  42. 투영과 그림자 (con’t) • 광원의 위치를 원점으로 이동  • 투시 투영 행렬  • 원래의 위치로 이동 

  43. 투영과 그림자 (con’t) • 앞의 세 행렬에 의하여 정점 (x, y, z)는 다음 위치로 변환

  44. 투영과 그림자 (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();

More Related