제 5 장 관측
DESCRIPTION
제 5 장 관측. 정보통신공학부 송 창근. 관측의 두 부분. 모델 - 관측 행렬 객체들을 원점에 카메라가 위치한 프레임 상의 표현으로 전환함 정규 관측 절차의 사용이 가능 투영행렬 어떤 종류의 투영을 할지를 결정 : 평행투영 혹은 투시 투영 세계의 어떤 부분의 이미지를 얻을 지 결정 : 절단 , 관측 공간. 5.1 고전적 관측과 컴퓨터 관측. 객체. 투영선. 투영면. 그림 5.1 관측. 합성 카메라 모형. 객체 관측자 투영선 : 직선 - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/1.jpg)
제 5 장 관측
정보통신공학부 송 창근
![Page 2: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/2.jpg)
관측의 두 부분• 모델 - 관측 행렬
– 객체들을 원점에 카메라가 위치한 프레임 상의 표현으로 전환함
– 정규 관측 절차의 사용이 가능• 투영행렬
– 어떤 종류의 투영을 할지를 결정 : 평행투영 혹은 투시 투영
– 세계의 어떤 부분의 이미지를 얻을 지 결정 : 절단 , 관측 공간
![Page 3: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/3.jpg)
그림 5.1 관측
5.1 고전적 관측과 컴퓨터 관측
투영면
투영선
객체
![Page 4: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/4.jpg)
합성 카메라 모형• 객체• 관측자• 투영선 : 직선• 투영의 중심 (COP, Center of
Projection)– 카메라 혹은 눈의 중심– 카메라 프레임의 원점 ( 그래픽스 시스템 )
• 투영면 : 평면
![Page 5: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/5.jpg)
투영의 방향• COP ( 투영의 중심 )
– COP 가 유한함 . 투영선이 한 점으로 만남 .– 투시 관측
• DOP ( 투영의 방향 ), Direction of Projection– COP 가 무한의 위치로 이동하면 , 투영선이
서로 평행하여진다 .– 평행관측
![Page 6: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/6.jpg)
그림 5.2 투영중심을 무한대로 옮김
평행관측
![Page 7: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/7.jpg)
평면 기하 투영• 투영면이 평면이고 투영선이 직선인
경우• 투시 투영과 평행 투영은 직선은
보존되지만 각도는 일반적으로 보존되지 않는다 .
![Page 8: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/8.jpg)
컴퓨터 그래픽스 시스템• 컴퓨터 그래픽스 시스템
– 평행 관측 (Orthographic Parallel Viewing)
– 투시 관측 (Perspective Viewing)
• 고전적 관측– 다중 관측 정사 투영– 1 점 , 2 점 , 3 점 투시
![Page 9: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/9.jpg)
그림 5.3 고전적 관측들
5.1.1 고전적 관측
정면경사
평면경사
등축
일점투시
삼점투시
![Page 10: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/10.jpg)
평면기하투영의 분류
![Page 11: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/11.jpg)
그림 5.4 직교 투영
5.1.2 직교 투영 (Orthographic Projection)
![Page 12: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/12.jpg)
직교 투영• 투영선은 투영면에 수직이다 .• 다중 관측 직교 투영에서 투영면은 객체의
주면 (principal face) 중 하나와 평행하다 .• 그림 5.5 : 세 개의 다중관측 직교 투영들
• 직교 투영으로부터 관측자가 객체의 형상을 그려볼 수 있기 위해서는 세 개 이상의 관측이 필요하다
• 거리와 각이 보존된다 .
![Page 13: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/13.jpg)
그림 5.5 신전과 세 개의 다중관측 직교 투영들
그림 5.5 다중 관측 직교 투영들
![Page 14: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/14.jpg)
5.1.3 측측 투영 (axonometric projection)
• 투영선은 투영면에 수직이지만 , 투영면은 객체에 대해 어느 방향에도 존재할 수 있다 . 즉 , 어떤 기본측과도 투영면이 수직하지 않음 .
• 만일 투영면이 사각형 객체의 모서리에 만날 때 .( 그림 5.7)
-등축관측 (isometric view) : 세개의 주면에 대하여 대칭으로 놓여지면
-이축관측 (dimetric view) : 두 개의 주면에 대칭으로 놓인 경우
-삼축 관측 : 일반적인 경우
• 길이가 일정하게 축소됨 . 따라서 길이 계산이 가능-등축은 1 개의 축소비
-삼측 관측은 3 개의 축소비
• 평행선들이 이미지 안에서 보존되나 , 각은 그렇치 않다
![Page 15: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/15.jpg)
그림 5.6 (a) 축측 투영의 구성 (b) 평면도 (c) 측면도
5.1.3 측측 투영 (axonometric projection)
![Page 16: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/16.jpg)
그림 5.7 축측 관측들
그림 5.7 축측 관측들
이축 삼축 등축
![Page 17: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/17.jpg)
5.1.4 경사 투영 (oblique projection)
• 투영선과 투영면은 일정한 각을 가진다 .
• 투영면에 평행한 면 내의 각은 보존된다 .
![Page 18: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/18.jpg)
그림 5.8 (a) 경사투영의 구성 (b) 평면도 (c) 측면도
5.1.4 경사 투영 (oblique projection)
![Page 19: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/19.jpg)
그림 5.9 투시관측
5.1.5 투시 ( 원근 ) 관측 (Perspective Projection)
![Page 20: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/20.jpg)
투시관측• 객체가 관측자로부터 멀어질수록 그 크기가
줄어든다 .• 길이 측정이 불가능하다 .• 건축분야 , 애니메이션 등 실감나는 영상이
중요한 분야에 사용
![Page 21: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/21.jpg)
일점 , 이점 , 삼점 투시
• 객체의 세 가지 주방향 가운데 얼마나 많은 방향이 투영면에 평행한가에 따라서 일점 , 이점 , 삼점 투시로 구별된다 .
• 일점투시 : 두 개의 주 방향이 투영면에 평행하고 하나의 소실점이 존재
• 이점투시 : 하나의 주 방향이 투영면에 평행하고 , 두 개의 소실점이 존재
• 삼점투시 : 3 개의 주 방향에 평행한 모든 직선들은 3 개의 소실점에서 만난다 .
![Page 22: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/22.jpg)
이점 투시 투영
![Page 23: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/23.jpg)
그림 5.10 (a) 삼점 투시 (b) 이점투시 (c) 일점 투시
그림 5.10 일점 , 이점 , 삼점 투시
![Page 24: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/24.jpg)
그림 5.11 초기 카메라 위치
5.2 카메라의 위치지정
![Page 25: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/25.jpg)
(a) 초기상태 (b) 모델 - 관측 행렬의 변경 후
그림 5.12 카메라와 세계프레임의 이동
![Page 26: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/26.jpg)
그림 5.13 카메라의 위치 지정
그림 5.13
glMatrixMode(GL_MODELVIEW);glLoadIdentity();glTranslatef(0.0, 0.0, -d);glRotatef(-90.0, 0.0, 1.0, 0.0);
![Page 27: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/27.jpg)
그림 5.14 카메라의 프레임
5.2.2 관측 APIPHIGS
GKS-3DView Reference point(VRP)
View Plane Normal (VPN)
View-Up Vector (VUP)
![Page 28: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/28.jpg)
set_view_plane_normal(nx, ny, nz);: VPN 은 투영면 즉 , 카메라의 후면의 방향
set_view_up(ux, uy, uz);: VPN 만 주어졌을 때 평면 위에 카메라의
뒷면을 대고 마음대로 회전시킬 수 있다 . VUP 는 이러한 카메라를 고정시킨다 .
![Page 29: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/29.jpg)
그림 5.15 관측 상향 벡터의 결정
그림 5.15
![Page 30: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/30.jpg)
OpenGL 에서 사용
5.2.3 Look-At 함수
![Page 31: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/31.jpg)
gluLookAt 함수
• gluLookAt(eyex, eyey, eyez, atx, aty, atz, upx, upy, upz);- 카메라의 위치에 따라 모델 - 관측 행렬을 변경한다 .
• 카메라의 위치를 시점이라고 한다 .
![Page 32: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/32.jpg)
그림 5.17 횡전 , 종전 , 편요
5.2.4 기타 관측 API
![Page 33: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/33.jpg)
기타 관측 API
횡전 (Roll) : z 축을 중심으로 회전 종전 (pitch) : x 축을 중심으로 회전편요 (yaw) : y 축을 중심으로 회전
앙각 (elevation)방위각 (azimuth)꼬임각 (twist angle)
![Page 34: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/34.jpg)
그림 5.18 앙각과 방위각
앙각
방위각
극좌표계
![Page 35: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/35.jpg)
5.3 단순한 투영도광학 컴퓨터 그래픽스
카메라의 위치렌즈와 필름의 크기
카메라의 위치투영의 종류
광각렌즈망원렌즈
평행투영과 유사투시관측
![Page 36: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/36.jpg)
5.3.1 투시 투영• 카메라의 위치 : 원점• 카메라의 방향 : -z 축 방향
![Page 37: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/37.jpg)
(a) 대부분의 실제적인 상황
(b) 보다 일반적인 상황
카메라의 뒷면이 정면에 대하여 임의의 방향도 가질 수 있다 .
그림 5.19 두 대의 카메라
![Page 38: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/38.jpg)
투시 변환• 투시 변환 (perspective transformation)
• 역변환 ( 투영의 위치로부터 원래의 위치로 ) 할 수 없다 .
• 직선은 보존되지만 affine 변환은 아니다 .
• 동치 좌표계 ( 주로 w=1 인 경우를 사용한다 .
),,(),,( ppp zyxzyx
),,,(),,( wwzwywxzyx
![Page 39: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/39.jpg)
(a) 삼차원 관측 (b) 평면도 (c) 측면도
그림 5.20 투시투영의 세 관측들
dzx
x
d
x
z
x
p
p
dzy
y
d
y
z
y
p
p
![Page 40: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/40.jpg)
dzx
x
d
x
z
x
p
p
dzy
y
d
y
z
y
p
p
비균일 축소 (nonuniform foreshortening)
z 로 나누어지므로 비균일 축소
![Page 41: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/41.jpg)
0100
0100
0010
0001
d
M
1
z
y
x
p
dz
z
y
x
qM 은 한점 를 로 변환한다
![Page 42: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/42.jpg)
p
p
p
zddz
z
ydz
y
xdz
x
투시제산
11
'p
p
p
z
y
x
ddz
ydz
x
q
![Page 43: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/43.jpg)
그림 5.21 투영 파이프라인
모델 - 관측 투영 투시제산
![Page 44: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/44.jpg)
5.3.2 직교 투영(orthographic)
• 투영선이 관측 평면에 수직인 평행 투영• 투시 투영 변환과 직교 투영 변환에
대해서 같은 pipeline 을 사용할 수 있지만 , 나눗셈은 불필요하다 .
![Page 45: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/45.jpg)
그림 5.22 직교투영
![Page 46: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/46.jpg)
0
p
p
p
z
yy
xx
11000
0000
0010
0001
1
z
y
x
z
y
x
p
p
p
![Page 47: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/47.jpg)
5.4 OpenGL 에서의 투영
![Page 48: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/48.jpg)
그림 5.23 관측 공간의 정의
화각
![Page 49: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/49.jpg)
그림 5.24 전후 전단면들
![Page 50: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/50.jpg)
5.4.1 OpenGL 에서의 투시glFrustum(xmin, xmax, ymin, ymax, zmin, zmax);
glMatrixMode(GL_PROJECTION);glLoadIdentity();glFrustum(xmin, xmax, ymin, ymax, zmin, zmax);
![Page 51: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/51.jpg)
그림 5.25 절두체의 정의
glFrustum(xmin, xmax, ymin, ymax, zmin, zmax);
![Page 52: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/52.jpg)
그림 5.26 화각을 이용한 지정
gluPerspective(fovy, aspect, near, far);
![Page 53: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/53.jpg)
5.4.2 OpenGL 에서의 평행관측
gluortho2D(xmin, xmax, ymin, ymax, zmin, zmax);
![Page 54: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/54.jpg)
그림 5.27 직교관측
gluortho2D(xmin, xmax, ymin, ymax, zmin, zmax);
![Page 55: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/55.jpg)
5.5 은면 제거• 은면 제거 알고리즘
(hidden-surface-removal algorithm)• 가시면 알고리즘
(visible-surface algorithm)• 객체 공간 알고리즘
(object-space algorithm)• 영상공간 알고리즘
(image-space algorithm)
![Page 56: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/56.jpg)
• 깊이 버퍼 (z-buffer)• gluInitDisplayMode(GLUT_DOUBLE | GLUT_DE
PTH | GLUT_RGB);gluEnable(GL_DEPTH_TEST);
• glClear(GL_DEPTH_BUFFER_BIT);
![Page 57: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/57.jpg)
그림 5.28 z- 버퍼 알고리즘
![Page 58: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/58.jpg)
5.6 장면 안에서의 움직임
![Page 59: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/59.jpg)
Void display(void){ glClear(GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT); /* Update viewer position in modelview matrix*/ glLoadIdentity(); gluLookAt(viewer[0],viewer[1],viewer[2], 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); /* rotate cube */ 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 60: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/60.jpg)
void keys(unsigned char key, int x, int y) { /* Use x, X, y, Y, z, and Z keys to move view
er */ 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();}
![Page 61: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/61.jpg)
void myReshape(int w, int h){ glViewport(0, 0, w, h);
/* Use a perspective view */ glMatrixMode(GL_PROJECTION); glLoadIdentity();if(w<=h) glFrustum(-2.0, 2.0, -2.0 * (GLfloat) h/(GLfloat) w, 2.0* (GLfloat) h /(GLfloat) w, 2.0, 20.0);else
glFrustum(-2.0, 2.0, -2.0 * (GLfloat) w/ (GLfloat) h, 2.0* (GLfloat) w / (GLfloat) h, 2.0, 20.0);/* Or we can use gluPerspective */ /* gluPerspective(45.0, w/h, -10.0, 10.0); */ glMatrixMode(GL_MODELVIEW);
}
![Page 62: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/62.jpg)
5.7 평행 투영 행렬
![Page 63: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/63.jpg)
5.7.1 투영 정규화• 투영 정규화 (projection normalization)
이란 객체의 일반적인 투영을 구현할 때 , 객체를 왜곡시킨 후에 직교 투영으로 변환하는 방식이다 .
• 예를들면 , 투시 투영을 구현할 때 , 물체를 적당히 왜곡한 후에 직교 투영을 적용한다 .
![Page 64: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/64.jpg)
(a) 투시관측 (b) 왜곡된 객체의 직교 투영
그림 5.29 객체의 사전 왜곡
![Page 65: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/65.jpg)
그림 5.30 정규화 변환
왜곡 ( 정규화 ) 직교투영
일반적인 투영을 동일한 절단 공간을 갖는 직교 투영으로 바꾼다 . 직교 투영이 원하는 일반적인 투영과 같을 수 있도록 투영행렬에 의해 객체들을 왜곡시킴으로써 가능하다
![Page 66: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/66.jpg)
5.7.2 직교 투영 행렬
0
p
p
p
z
yy
xx
![Page 67: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/67.jpg)
1
1
1
z
y
xglMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
정규관측 공간 (canonical view volume)
glOrtho(xmin, xmax, ymax, ymin, zmin, zmax);
디폴트 관측공간
![Page 68: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/68.jpg)
그림 5.31 관측공간을 정규관측공간으로 사상
• 투영행렬은 지정된 관측 공간을 정규 관측 공간으로 사상하는 4ⅹ4 행렬이다 .
• 지정된 관측 공간 내부 ( 외부 ) 의 점은 정규관측공간 내부 ( 외부 ) 의 점으로 변환된다 .
• 2 단계 과정 .
-이동변환을 통해 지정된 관측 공간의 중심을 정규관측공간의 중심 ( 원점 ) 으로 이동한다 .
- 지정된 관측 공간의 변의 길이가 2 가 되도록 크기 변환을 한다 .
![Page 69: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/69.jpg)
그림 5.32 정규화를 위한 어파인 변환
![Page 70: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/70.jpg)
관측공간을 정규관측공간으로 사상
))(2),(2),(2(
)2)(,2)(,2)((
minmaxminmaxminmax
minmaxminmaxminmax
zzyyxxS
zzyyxxT
![Page 71: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/71.jpg)
1000
200
02
0
002
minmax
minmax
minmax
minmax
minmax
minmax
minmax
minmax
minmax
zz
zz
zz
yy
yy
yy
xx
xx
xx
STP
투영행렬
현재 가정은 투영선은 z 축의 음의 무한대에서 원점을 향하는 것이었다 . 그러나 OpenGL 의 경우는 투영선이 무한한 양의 z 축에서 시작한다 . 따라서 , 반사 변환 S(1,1,-1) 이 추가된다 .
![Page 72: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/72.jpg)
1000
200
02
0
002
minmax
minmax
minmax
minmax
minmax
minmax
minmax
minmax
minmax
zz
zz
zz
yy
yy
yy
xx
xx
xx
STP
최종 투영행렬
![Page 73: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/73.jpg)
5.7.3 경사 투영
그림 5.33 경사투영
![Page 74: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/74.jpg)
그림 5.34 경사 절단공간
![Page 75: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/75.jpg)
그림 5.35 경사투영의 (a) 평면도와 (b) 측면도
pxx
z
tan
0
cot
cot
p
p
p
z
zyy
zxx
pyy
z
tan
![Page 76: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/76.jpg)
0
cot
cot
p
p
p
z
zyy
zxx
1000
0000
0cot10
0cot01
P
밀림변환 (shear)
![Page 77: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/77.jpg)
그림 5.36 밀림변환의 효과
왜곡된 입방체의 직교 투영은 왜곡되지 않은 입방체의 경사 투영과 같다 .
![Page 78: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/78.jpg)
1000
0100
0cot10
0cot01
1000
0000
0010
0001
),(
HPP orth
![Page 79: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/79.jpg)
1000
200
02
0
002
minmax
minmax
minmax
minmax
minmax
minmax
minmax
minmax
minmax
zz
zz
zz
yy
yy
yy
xx
xx
xx
T
정규관측 공간이 아니기 때문에 , 밀림변환 후 그리고 최종의 직교 투영을 하기 전에 다음의 변환을 해야 한다 .
),( HTPP orth
![Page 80: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/80.jpg)
5.8 투시 투영• 정규관측공간의 모습 • 투시 정규화 변환 (perspective
normalization transformation)– 투시투영을 직교투영으로 바꾸는 변환
• OpenGL 에서 사용되는 투시 행렬
![Page 81: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/81.jpg)
5.8.1 투시 정규화
0100
0100
0010
0001
M
![Page 82: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/82.jpg)
5.8.1 투시 정규화
0100
2200
0010
0001
N
관측공간의 측면들이 투여면을 45 도 교차하도록 함으로써 화각이 90 도로 고정한다 .
![Page 83: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/83.jpg)
그림 5.37 간단한 투시투영
![Page 84: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/84.jpg)
0100
0000
0010
0001
NM orth
z
y
x
NpMp orthp 0
![Page 85: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/85.jpg)
z
yy
z
xx
p
p
변환로의해에 1" " xz
xxzx
변환로의해에 1" " yz
yyzy
변환로의해에앞쪽면 0" )1
1(2")(1 zz
zz
변환로뒤쪽면 )1
1(2")(max
max zzzz
![Page 86: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/86.jpg)
그림 5.38 관측공간의 투시 정규화
![Page 87: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/87.jpg)
5.8.2 OpenGL 투시 변환
)2
,2
()cot,(cotmin
maxmin
min
maxmin
z
yy
z
xxHH
![Page 88: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/88.jpg)
min
max
min
minmax
min
minmax
2
2
zz
zz
z
yyy
z
xxx
1min
z
zy
zx
)1),(2,)(2( minminmaxminminmaxmin zyyzxxzS
![Page 89: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/89.jpg)
그림 5.38 Open GL 투시
![Page 90: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/90.jpg)
0100
00
0010
0001
Nz
zz
'
z
z
zz
zz
1
)('minmax
max
![Page 91: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/91.jpg)
0100
00
0010
0001
minmax
max
minmax
max
zz
z
zz
zN
![Page 92: 제 5 장 관측](https://reader033.vdocuments.mx/reader033/viewer/2022061520/56813b51550346895da44045/html5/thumbnails/92.jpg)
0100
200
02
0
002
minmax
minmax
minmax
minmax
minmax
minmax
minmax
min
minmax
minmax
minmax
min
zz
zz
zz
zzyy
yy
yy
zxx
xx
xx
z
NSHP