3D Computer Graphics 5. Viewing
동신대학교 멀티미디어컨텐츠 연구센터 Viewing Process first part : model-view in Chapter 4 second part : projection in Chapter 5
5.1 Classical and Computer Viewing
동신대학교 멀티미디어컨텐츠 연구센터 Viewing classical viewing –hand drawing 에서 발전 basic components –object –a viewer (COP) –projector –projection plane COP : center of projection
동신대학교 멀티미디어컨텐츠 연구센터 Viewing perspective viewing –finite COP –center of projection parallel viewing –infinite COP = DOP –direction of projection
동신대학교 멀티미디어컨텐츠 연구센터 Classical Viewings Hand drawing 에서 발전
동신대학교 멀티미디어컨텐츠 연구센터 Orthographic Projection parallel projection 의 일종 –also known as orthogonal projection –projector 가 projection plane 에 수직 –projection plane 은 object 에 수직 multi-view orthographic projection –1 개의 parallel projection 은 정보 전달에 한계 – 건축용 도면에서 많이 사용 –length and angle preserving
동신대학교 멀티미디어컨텐츠 연구센터 Axonometric Projection parallel projection 의 일종 –projector 가 projection plane 에 수직 – 그러나, projection plane 자체가 기울어짐 – 단점 : distortion 발생 가능 Projection Plane (a)(b)(c)
동신대학교 멀티미디어컨텐츠 연구센터 Axonometric Projections isometric view : 3 개 axis 에 symmetric dimetric view : 2 개 axis 에 symmetric trimetric view : general case
동신대학교 멀티미디어컨텐츠 연구센터 Oblique Projection parallel projection 의 일종 – projector 와 projection plane 이 서로 기울어진 각도 –distortion 발생 Projection Plane (a)(b) (c) Projection Plane
동신대학교 멀티미디어컨텐츠 연구센터 Perspective Projection 르네상스 시대에 사실주의 화풍에서 유래 vanishing point ( 소실점 ) –projector 들이 모이는 점 classical viewing 에서는 –three-point perspective –two-point perspective –one-point perspective → computer graphics 에 도입
5.2 Positioning of the Camera
동신대학교 멀티미디어컨텐츠 연구센터 3D Viewing Camera 를 흉내낸다.
동신대학교 멀티미디어컨텐츠 연구센터 Camera Positioning initial camera position in OpenGL –at the origin of the world frame, to –z direction camera movement = reverse movement of the objects glTranslatef(0.0,0.0,-100.0)
동신대학교 멀티미디어컨텐츠 연구센터 Camera Positioning another example : rotated camera glMatrixMode(GL_MODELVIEW); glLoadIdentity( ); glTranslatef(0.0, 0.0, –100); glRotatef(–90.0, 0.0, 1.0, 0.0); –object 입장 : -90 도 회전, -100 이동 –camera 입장 : 100 이동, 90 도 회전
동신대학교 멀티미디어컨텐츠 연구센터 Viewing’s API general viewing API : PHIGS, GKS-3D approach –PHIGS, GKS-3D : famous graphics library camera 를 어떻게 설정할 것인가 ? –VRP (view reference point) : 3D point, camera 의 위치 –VPN (view plane normal) : view plane 의 방향을 결정 –VUP (view up vector) : camera film 의 윗 방향을 결정 view reference point view up vector V view-plane normal vector N
동신대학교 멀티미디어컨텐츠 연구센터 Viewing Coordinates World Frame 과 Camera Frame 의 관계
동신대학교 멀티미디어컨텐츠 연구센터 Viewing Matrix 의 계산 V : viewing matrix –world frame 의 점 q 를 camera frame 으로 변환 p : VRP, n : (normalized) VPN, v : (normalized) VUP –in world frame
동신대학교 멀티미디어컨텐츠 연구센터 Viewing Matrix 의 계산 제약 조건들
동신대학교 멀티미디어컨텐츠 연구센터 Viewing Matrix 의 계산
동신대학교 멀티미디어컨텐츠 연구센터 Look-At Function OpenGL approach – 직접 viewing matrix 설정도 가능 V 계산 후, glLoadMatrix( ) 다른 방법 : gluLookAt( ) 함수 – 점 (eye x, eye y, eye z ) 에서, 점 (at x, at y, at z ) 를 본다 (look at). – 필름 ( 스크린 ) 의 윗 방향은 (up x, up y, up z ) 와 유사
동신대학교 멀티미디어컨텐츠 연구센터 Look-At Function gluLookAt(GLdouble eyex, eyey, eyez, GLdouble atx, aty, atz, GLdouble upx, upy, upz); – 모두 world frame 기준으로 좌표 입력 VRP = (eyex, eyey, eyez) VPN = (atx, aty, atz) – (eyex, eyey, eyez) VUP : (upx, upy, upz) 의 방향 보정 normalize 는 자동으로 수행
동신대학교 멀티미디어컨텐츠 연구센터 Roll-Pitch-Yaw Approach 주로 flight simulator 에서 사용 –roll : 좌우동, z 축 기준의 회전각 –pitch : 상하동, x 축 기준의 회전각 –yaw : 편요각, y 축 기준의 회전각 3 개의 rotation 으로 viewing matrix 설정 – 필요하면, 1 개의 translation 추가 ( 비행기 위치 )
동신대학교 멀티미디어컨텐츠 연구센터 Polar Coordinate Approach 주로 지상 관측 모델에서 사용 – 예 : 게임의 대공포 사격 –azimuth ( 방위각 ) : xy 평면에서의 회전각 –elevation ( 앙각 ) : 위로 올라간 각도 2 개의 rotation matrix 로 구현 가능
5.3 Simple Projections
동신대학교 멀티미디어컨텐츠 연구센터 Parallel and Perspective Projection parallel projection –vector 에 평행한 projection perspective projection –point 를 향한 projection
5.4 Projections in OpenGL
동신대학교 멀티미디어컨텐츠 연구센터 Perspective Projection in OpenGL perspective projection 을 설정하는 방법 ? –angle of view (field of view, FOV) : 보이는 각도 –view volume, view frustum : 실제로 보이는 공간
동신대학교 멀티미디어컨텐츠 연구센터 (x max, y max, -z far ) (x min, y min, -z near ) Perspective Projection in OpenGL glFrustum(GLdouble xmin, xmax, GLdouble ymin, ymax, GLdouble znear, zfar); – 주의 : znear, zfar 는 positive 여야 함 zmin = –znear, zmax = –zfar
동신대학교 멀티미디어컨텐츠 연구센터 Perspective Projection in OpenGL gluPerspective(GLdouble fovy, aspect, znear, zfar) –fovy : field of view in y-direction, in degree –aspect : width / height
동신대학교 멀티미디어컨텐츠 연구센터 Parallel Projection in OpenGL glOrtho(GLdouble xmin, xmax, ymin, ymax, zmin, zmax); (x min, y min, -z min ) (x max, y max, -z max )
5.5 Hidden Surface Removal
동신대학교 멀티미디어컨텐츠 연구센터 Hidden Surface Removal remove surfaces that should not be visible to the viewer –object-space approaches 기본 아이디어 : sort the polygons –image-space approaches 기본 아이디어 : pixel 단위 처리 z-buffer algorithm visible surface algorithm, visible surface detection –find which surfaces are visible – 결국 같은 algorithm. 결과만 반대로 해석
동신대학교 멀티미디어컨텐츠 연구센터 Hidden Surface Removal Z-buffer algorithm –OpenGL 의 기본적인 hidden surface removal 방법 – 구현이 쉽고, video card 에서 지원하는 경우가 많다 겹치는 부분에서 z1 < z2 이므로, 시점에서 더 가까운 원이 출력됨
5.6 Walking Through a Scene
동신대학교 멀티미디어컨텐츠 연구센터 Example : Moving Viewer P.612 A.11 움직이는 관측자 chap 4. 의 cube program 에 기능 추가 –camera 위치 : GLdouble viewer[3]; gluLookAt( ) 사용 –keyboard callback 추가 x, y, z 키에 따라, camera 위치 이동 –perspective view 지원 glFrustum( ) 사용