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

Slides:



Advertisements
Similar presentations
강의 내용 : 카메라 DirectX 9 을 이용한 게임 개발 기본 코스. 목 차 카메라 요구사항 구현.
Advertisements

1 Lecture #2 제 1 장. 컴퓨터 그래픽스 시스템과 모델. 2 강의 개요 컴퓨터 그래픽스 개론 및 3D 그래픽스에 대한 개념을 설명한다. n 강의 내용 1. 컴퓨터 그래픽스의 응용 2. 그래픽스 시스템 3. 물리적 이미지 / 합성이미지 4. 인간의 시각 시스템.
Billboard copyright
Chapter 3. 뷰잉(Viewing).
Multimedia Programming 14: Image Warping 2
3D Computer Graphics 5. Viewing 동신대학교 멀티미디어컨텐츠 연구센터 Viewing Process first part : model-view in Chapter 4 second part : projection in Chapter.
Implement of Input and Interaction
OpenGL 실습 12 로봇.
OpenGL Programming (III) 1. Drawing in 3D 2. Manipulating 3D Space
렌더기의 구현 최 수 미
순차, 조건, 반복 이점숙 같은 문제 다르게 해결하기 순차, 조건, 반복 이점숙
풀 다운 메뉴 File > New “intent” 이름을 넣고 OK 를 클릭한다.
5. 좌표변환과 OpenGL행렬 이론.
OpenGL 시작하기.
Lecture #7 제 4 장. 기하학적 객체와 변환 (2).
기하학적 객체와 변환.
4장 기하학적 객체와 변환 – OpenGL 변환 학습목표 OpenGL 에서 어떻게 변환을 수행하는지 OpenGL 행렬모드 회전
Report #5 - due: 4/13 다음 10*5의 희소 행렬 A, B를 고려하라.
Chapter 5. 라이팅(Lighting)
Chap 9. 텍스쳐(Texture).
사원수 (Quaternion)
1-1 일과 일률.
Basic principles of roundness measurement
1장 – 그래픽스 시스템과 모델 2장 – 그래픽스 프로그래밍 3장 – 입력과 상호작용 4장 – 기하학적 객체와 변환 5장 관측
학습목표 7장. 투상변환과 뷰포트변환 평행투상과 원근투상의 차이점을 이해한다. 가시부피 설정방식을 이해한다.
7장. 투상변환과 뷰포트변환 학습목표 평행투상과 원근투상의 차이점을 이해한다. 가시부피 설정방식을 이해한다.
학습목표 7장. 투상변환과 뷰포트변환 평행투상과 원근투상의 차이점을 이해한다. 가시부피 설정방식을 이해한다.
제 2 장. 그래픽스 프로그래밍 : OpenGL 개요/ 예제 프로그램
5.2 뷰 프레임과 뷰 변환 가상 카메라 정의 가상 카메라 정의하기 1 ) 어디에 있는가
openGL Project 제안서 - 해상 전투
제 1 장. 컴퓨터 그래픽스 시스템과 모델 - 3D 컴퓨터 그래픽스 구조 - OpenGL API 개요
학습목표 8장. 가시성 판단 후면제거의 정의와 처리방법을 이해한다. 절단작업의 정의와 처리방법을 이해한다.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
3차원 물체 그리기.
강원대학교 공과대학 제어계측공학과 2010년도 제2학기
3차원 객체 모델링.
Ⅱ. 지구의 변동과 역사 1. 지구의 변동 2. 지구의 역사 3. 우리나라의 지질.
Open GL GLUT 라이브러리 국내 관련사이트 다운받으세요.
광원 제어 하기.
벡터의 공간 이문현.
도형의 기초 3. 기본작도 삼각형의 작도 수직이등분선의 작도 각의 이등분선의 작도.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
4장 기하학적 객체와 변환 - 기하 1장 – 그래픽스 시스템과 모델 2장 – 그래픽스 프로그래밍 3장 – 입력과 상호작용
OpenGL (spaceship movement) PROJECT 2012.
다면체 다면체 다면체: 다각형인 면만으로 둘러싸인 입체도 형 면: 다면체를 둘러싸고 있는 다각형
Tween Animation 천승현.
OpenGL 프로젝트 김병욱 김상진 김성환.
CAD 실습 2013년 2학기.
대칭과 전위 3차원 대칭과 32 점군 정족과 정계 결정면의 명칭 3차원 격자와 230 공간군 결정형 결정의 투영
평 면 도 형 삼각형 다각형 원과 부채꼴 다각형과 원 학습내용을 로 선택하세요 다각형과 원
1. 단면도 그리기 (1) 단면도의 정의 물체의 외형에서 보이지 않는 부분은 숨은선으로 그리지만, 필요한
서울대학교 컴퓨터공학부 김명수 행렬과 2차원 변환 서울대학교 컴퓨터공학부 김명수
2. 누화와 케이블링 1. 서론 2. 용량성 누화 3. 유도성 누화 4. 복합적인 누화(누화의 일반적인 이해)
1. 스케치 평면 설정 평면상의 스케치 스케치를 할 평면 선택 스케치시 Horizontal (x축)으로 사용할 기준축 선택
Chapter 1 단위, 물리량, 벡터.
DA :: 퀵 정렬 Quick Sort 퀵 정렬은 비교방식의 정렬 중 가장 빠른 정렬방법이다.
원의 방정식 원의 방정식 x축, y축에 접하는 원의 방정식 두 원의 위치 관계 공통접선 원과 직선의 위치 관계
Chapter 1 단위, 물리량, 벡터.
공도의 실버라이트 하기 좋은 날 퍼스펙티브 3D로 깊이 있게.
1. 정투상법 정투상법 정투상도 (1) 정투상의 원리
9 브라우저 객체 모델.
우선 각 평면도에서 점선으로 강조한 직육면체 형상의 피처를 생성한다. 여기서 컴퓨터응용가공산업기사 준비를
컴퓨터공학과 손민정 Computer Graphics Lab 이승용 교수님
통계학 R을 이용한 분석 제 2 장 자료의 정리.
자기유도와 인덕턴스 (Inductance)
In-house Consultant Training
Learning HTML5 Canvas #2 Jeon Yong ju.
SEOUL NATIONAL UNIVERSITY OF SCIENCE & TECHNOLOGY
Lecture #6 제 4 장. 기하학적 객체와 변환 (1).
생산성 증대 효율성 향상 측정 수행 능력.
Presentation transcript:

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

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

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

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

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

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

고전적 관측 고전적 관측에는 주면(principal face)라는 개념이 존재 평행 투영 투시투영 직교투영 : 투영면이 하나의 주면에 평행 축측투영 등축 투영 : 투영면이 세 개의 주면에 대칭 이축 투영 : 투영면이 두 개의 주면에 대칭 삼축 투영 : 일반적인 경우 경사투영 투시투영 일점 투시 이점 투시 삼점 투시 Various viewing methods were invented to show a specific relationship among the object, the viewer, and the projection plane.

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

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

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

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

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

투시 투영 투시관측

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

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

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

방법 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); 사용하기가 쉽지 않다

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

단순한 투영들 카메라는 원하는 위치에 놓여졌다. 이제 렌즈를 택하자 초점거리 화각 (fov) 이미지 크기 화각(field of view) focal length, field of view, image size. 이 세개의 parameter 중 어느것을 정해주는가? 이들 파라메터는 independent하지 않음. 선택의 자유가 있음. 통상적으로, focal length를 먼저 지정해 줌으로써 projection을 수학적으로 정의해주고, 그 다음에 field of view를 정함으로써 얼마만큼 보이도록 하겠는가를 결정해 준다.

두 종류의 카메라 필름

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

투시 투영 -d) -d

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

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

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

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

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

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

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

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

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

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

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

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

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

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