School of Computer, Information and Communication Engineering

Slides:



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

Billboard copyright
수학을 통해 배우는 IT 과학의 세계 전북대: 한상언 교수.
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.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
5. 좌표변환과 OpenGL행렬 이론.
OpenGL 발표일 : 발표자 : 조윤혜.
Two-Dimensional Geometric Transformations
기하학적 객체와 변환.
4장 기하학적 객체와 변환 – OpenGL 변환 학습목표 OpenGL 에서 어떻게 변환을 수행하는지 OpenGL 행렬모드 회전
Lecture #8 제 5 장. 관측(viewing).
모 바 일 게 임 제 작 한국IT전문학교 박재성.
Chap 9. 텍스쳐(Texture).
사원수 (Quaternion)
1-1 일과 일률.
1장 – 그래픽스 시스템과 모델 2장 – 그래픽스 프로그래밍 3장 – 입력과 상호작용 4장 – 기하학적 객체와 변환 5장 관측
7장. 투상변환과 뷰포트변환 학습목표 평행투상과 원근투상의 차이점을 이해한다. 가시부피 설정방식을 이해한다.
4장 기하학적 객체와 변환 – 변환 학습목표 예제 - 회전입방체 표준 변환을 배운다 동차좌표 변환행렬의 유도
학습목표 8장. 가시성 판단 후면제거의 정의와 처리방법을 이해한다. 절단작업의 정의와 처리방법을 이해한다.
SEOUL NATIONAL UNIVERSITY OF SCIENCE & TECHNOLOGY
계층적, 객체지향적 그래픽스 최 수 미
Chapter2 기술적 배경 지식 구희모 권영우.
학습목표 학습목차 다른 홈페이지의 HTML 파일 코드를 보는 방법에 대해 알아봅니다.
3차원 물체 그리기.
강원대학교 공과대학 제어계측공학과 2010년도 제2학기
3차원 객체 모델링.
스크래치 언어 이해 스크래치 이용법 습득 고양이가 말을 하며 움직이는 예제 작성
Microsoft Robotics Developer Studio 고급 프로그래밍 과정 [Part 3] VPL 로봇 프로그래밍
Chapter03 캔버스(1) HTML5 Programming.
SEOUL NATIONAL UNIVERSITY OF SCIENCE & TECHNOLOGY
광원 제어 하기.
PTZ카메라를 이용한 Target Tracking
2차시: 달의 공전 지구과학
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
SEOUL NATIONAL UNIVERSITY OF SCIENCE & TECHNOLOGY
3D 프린팅 프로그래밍 01 – 기본 명령어 강사: 김영준 목원대학교 겸임교수.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
Clipping 이진학.
4장 기하학적 객체와 변환 - 기하 1장 – 그래픽스 시스템과 모델 2장 – 그래픽스 프로그래밍 3장 – 입력과 상호작용
1차시: 낮과 밤이 생기는 원리 지구과학
OpenGL (spaceship movement) PROJECT 2012.
인체 대 탐험 3D GAME ENGINE 게임 공학과 이성진.
SEOUL NATIONAL UNIVERSITY OF SCIENCE & TECHNOLOGY
Tween Animation 천승현.
CAD 실습 2013년 2학기.
Real time Interaction HyoungSeok Kim
Window, Viewport Window, Viewport.
2장. 일차원에서의 운동 2.1 평균 속도 2.2 순간 속도 2.3 분석 모형: 등속 운동하는 입자 2.4 가속도
서울대학교 컴퓨터공학부 김명수 행렬과 2차원 변환 서울대학교 컴퓨터공학부 김명수
2장 변형률 변형률: 물체의 변형을 설명하고 나타내는 물리량 응력: 물체내의 내력을 설명하고 나타냄
벡터의 성질 - 벡터와 스칼라 (Vector and Scalars) - 벡터의 합 -기하학적인 방법
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
Chapter 1 단위, 물리량, 벡터.
원의 방정식 원의 방정식 x축, y축에 접하는 원의 방정식 두 원의 위치 관계 공통접선 원과 직선의 위치 관계
Chapter 1 단위, 물리량, 벡터.
공도의 실버라이트 하기 좋은 날 퍼스펙티브 3D로 깊이 있게.
컴퓨터 구성요소와 사용 컴퓨터 문서 작업 인터넷 활용
3D 프린팅 프로그래밍 03 – 도형 회전 (손잡이컵 만들기) 강사: 김영준 목원대학교 겸임교수.
1. 정투상법 정투상법 정투상도 (1) 정투상의 원리
SEOUL NATIONAL UNIVERSITY OF SCIENCE & TECHNOLOGY
웹과 모바일 홈페이지의 이해와 제작 폰트_레이아웃
9 브라우저 객체 모델.
컴퓨터공학과 손민정 Computer Graphics Lab 이승용 교수님
학번: 이름: 견정수 학번: 이름: 장성우 학번: 이름: 조재훈
SEOUL NATIONAL UNIVERSITY OF SCIENCE & TECHNOLOGY
Learning HTML5 Canvas #2 Jeon Yong ju.
SEOUL NATIONAL UNIVERSITY OF SCIENCE & TECHNOLOGY
Lecture #6 제 4 장. 기하학적 객체와 변환 (1).
Presentation transcript:

School of Computer, Information and Communication Engineering Transformation Kim, Sung-Ho School of Computer, Information and Communication Engineering Sangji Univ.

학습목표 모델변환과 시점변환 어파인 공간을 정의하는 이유를 이해한다. 동차좌표를 정의하는 이유를 이해한다. 이동, 회전, 크기조절 등의 기하변환과 변환행렬을 이해한다. 모델 좌표계, 전역 좌표계, 시점 좌표계의 차이점을 이해한다. 좌표계 변환과 변환 행렬과의 관계를 이해한다. 기하변환 순서와 함수호출 순서의 상관관계를 이해한다.

경계면 표현(Boundary Surface Representation) 좌표계- 3차원 물체표현 – pp.237 경계면 표현(Boundary Surface Representation) 메쉬(Mesh), 표면 메쉬(Surface Mesh), 다각형 메쉬(Polygon Mesh), 표면 다각형(Surface Polygon), 다각형(Polygon) 사각형 메쉬(Rectangular Mesh): 평면 보장 못함. 삼각형 메쉬(Triangular Mesh): 평면 보장. 2배의 드로잉 속도 [그림 6-2] 120, 300, 1000 개의 다각형 표면 [그림 6-5] 삼각형 메쉬

Wireframe, Solid Rendering 와이어 프레임과 솔리드 렌더링 Wireframe, Solid Rendering 와이어 프레임: 드로잉 속도가 빠름 가끔씩 Solid Rendering으로 외형 확인 [그림 6-6] 설계 I [그림 6-7] 설계 II [그림 6-8] 설계 III

어파인 공간(同族, 親密, Affine Space) 어파인 연산 어파인 공간-pp.241 V = Q – P Q = V + P 등식의 우변은 벡터와 점 사이의 덧셈이 된다. 어파인 공간(同族, 親密, Affine Space) 점과 벡터를 동족처럼 취급함으로써 벡터공간을 확장 어파인 연산 벡터와 벡터의 덧셈(뺄셈) 스칼라와 벡터의 곱셈(나눗셈) 점과 벡터의 덧셈(뺄셈) [그림 6-11] 벡터 II

V = P + t (Q - P) = (1 - t)P + (t)Q (0 ≤ t ≤ 1) 어파인 공간 (계속) 선분표현 V = P + (1/2)(Q - P)  V = P + t (Q - P)  = (1 - t)P + (t)Q  (0 ≤ t ≤ 1) 어파인 공간에서 어파인 합(Affine Sum) 점의 계수 합이 1이 되는 경우 점의 덧셈은 각 점들 앞의 계수 합이 1일 때에 한해서만 허용됨. [그림 6-12] 선분 표현

좌표계-pp.243 기반벡터 벡터 p = 벡터 p’ 벡터 v = 4 V1 + 2 V2 + V3: 방향동일, 기반벡터만으로 표시가능    좌표계 원점과 기반벡터로 구성되는 프레임 Ex. 3차원 좌표계 = (r, V1, V2, V3) 원점: 어파인 공간에서 기반벡터 시작점을 일치시킨 곳         점 p = r + 4V1 + 2V2 + V3: 원점이 필요 [그림 6-16] 기반벡터 [그림 6-17] 어파인 공간

동차좌표(Homogeneous Coordinate System)-pp.245 벡터와 점의 표현이 다름 v = 4 V1 + 2 V2 + V3 P = r + 4V1 + 2V2 + V3   차원을 하나 올리면 동일 방법으로 표현 v = 4 V1 + 2 V2 + V3  + 0 r = (4, 2, 1, 0): 벡터 P = 4V1 + 2V2 + V3 + 1 r  = (4, 2, 1, 1): 점 3차원 점 (1, 2, 1) 4차원 동차좌표로 사상 동차좌표 (1, 2, 1, 1) = (2, 4, 2, 2) = (3, 6, 3, 3) = … 동차좌표 (x, y, z, w) => 3차원 좌표 (x/w, y/w, z/w) [그림 6-18] 동차좌표

기하변환- 기하변환(Geometric Transformation)-pp.247 물체 변환 또는 좌표계 변환의 기본 행렬로 표현됨 이동, 회전, 크기조절 등

2차원 이동(Translation)-pp.248 x' = 1☓x + 0☓y + Tx☓1 y' = 0☓x + 1☓y + Ty☓1 [그림 6-19] 2차원 이동 (6.12 )

3차원 이동-pp.249 [그림 6-19] 2차원 이동 (6.13 ) ( 6.14 )

2차원 회전(Rotation)-pp.250 [그림 6-21] 2차원 회전 (6.15 ) (6.16 ) (6.17 ) (6.18 )

3차원 회전-pp.251 회전축 기준의 회전으로 정의 반 시계 방향의 회전각 [그림 6-24] 반시계 방향 [그림 6-22] 3차원 회전 [그림 6-24] 반시계 방향 (6.19) (6.20 )

균등 크기조절(Uniform Scaling) vs. 차등 크기조절(Non-Uniform Scaling) 크기조절(Scaling)-pp.252 균등 크기조절(Uniform Scaling) vs. 차등 크기조절(Non-Uniform Scaling) [그림 6-25] 균등 크기조절 [그림 6-26] 차등 크기조절 (6.25) (6.26 ) http://www.xmission.com/~nate/tutors.html

전단(Shearing)-pp.253 예: x-y 평면에서의 전단 [그림 6-27] 전단 (6.27) (6.28) (6.29 ) (6.30 )

복합변환(Composite Transformation)-pp.253 크기조절(S1) 후, 결과 물체를 회전(R1)한 후, 다시 크기조절(S2)  P' = S2ㆍR1ㆍS1ㆍP 행렬곱셈의 순서에 유의 P' = CㆍP 복합행렬 C는 한번만 계산. 모든 정점에 적용

원점 기준 회전(Origin Rotation) versus 중심점 기준 회전(Pivot Point Rotation) 복합변환 (계속) 원점 기준 회전(Origin Rotation) versus 중심점 기준 회전(Pivot Point Rotation) 중심점 기준 회전 피벗이 좌표계 원점에 일치하도록 물체를 이동한다. 물체를 원점 기준으로 축 주위로 회전한다. 회전된 물체를 ➀번에서 이동한 방향의 반대 방향으로 이동한다. [그림 6-28] 원점 중심의 회전 [그림 6-29] 피벗 중심의 회전 (6.31)

이동 후 회전과 회전 후 이동-pp.255 교환법칙이 성립하지 않음. RㆍT와 TㆍR은 일반적으로 서로 다른 결과 물체 인스턴스 C = TㆍRㆍS [그림 6-30] 이동 후 회전과 회전 후 이동 비교 [그림 6-31] 크기조절/회전 및 이동

반사(Reflection)-pp.256 [그림 6-32] 반사변환 (6.34)

y=x 기준의 반사-pp.257 복합변환 [그림 6-33] y = x 축 기준의 반사 변환

물체공간(Object Space): 부동소수 정밀도 지엘의 모델변환- 모델 좌표계-pp.263 모델링 물체를 설계 = 물체 정점을 정의 좌표계 (눈금)단위 임의로 설정 물체공간(Object Space): 부동소수 정밀도 좌표계 원점 및 축방향 설계상의 편의 물체마다 서로 다름 모델 좌표계(MCS, Modeling Coordinate System) 또는 지역 좌표계(LCS, Local Coordinate System) [그림 6-40] 모델링 기본단위 [그림 6-41] 모델 좌표계

전역 좌표계, 시점 좌표계-pp.264 장면 여러 물체가 존재 = 여러 지역 좌표계가 존재 일률적으로 어우를 수 있는 기준 좌표계 전역 좌표계(WCS, World Coordinate System) 임의 위치에 선정 시점 바라보는 위치에 따라 장면은 달라보임 시점 좌표계(VCS, View Coordinatge System) [그림 6-42] 전역 좌표계

변환행렬의 의미-pp.265 Ex. 이동변환 기본값으로 WCS=MCS 일반적 관점 변환행렬 T는 WCS 기준으로 물체 정점을 (3, 2, 0)만큼 이동함을 의미. 지엘의 관점 변환과 동시에 WCS와 MCS가 분리됨 변환 후에도 MCS 기준의 정점 좌표는 불변 좌표계의 이동으로 간주. 전역 좌표계를 (3, 2, 0)만큼 이동하면 모델 좌표계와 일치. "전역 좌표계를 모델 좌표계로 일치시키기 위한 것이 변환행렬이다“ (6.42) [그림 6-43] 모델 좌표계의 분리

변환행렬의 의미 (계속) 회전 물체와 함께 MCS도 회전. MCS 기준의 물체 좌표는 불변 회전변환 행렬 T를 (a)의 WCS를 45(b)의 MCS로 일치시키는데 사용. 이후 이를 MCS 기준으로 물체를 렌더링 크기조절: x축으로 2배 MCS x축 눈금의 절대 길이가 바뀜. MCS 기준의 물체 좌표는 불변(Ex. (2, 2, 0)) [그림 6-45] 전역 좌표계와 모델 좌표계의 일치

지엘 파이프라인-pp.267 모델변환 물체에 가해지는 기하변환(이동, 회전, …) 모델행렬로 대변됨 모델 좌표에 모델 행렬을 곱하면 전역좌표 시점변환 또는 뷰변환 카메라 위치와 방향 설정 뷰행렬로 대변됨 전역좌표에 뷰행렬을 곱하면 시점좌표 지엘은 모델행렬과 뷰행렬을 모델뷰 행렬 하나로 취급 물체를 뒤로 빼나 카메라를 앞으로 미나 마찬가지 [그림 6-46] 지엘 파이프라인

지엘의 모델변환-pp.269 행렬모드 설정 조작하고자하는 행렬을 선택 void glMatrixMode(GLenum mode); GL_MODELVIEW, GL_PROJECTION, GL_TEXTURE 현 변환행렬(CTM: Current Transformation Matrix) 상태변수. 스택 탑에 존재 항상 이것이 정점에 곱해짐 [그림 6-47] 행렬 모드 스위칭

지엘의 모델변환 (계속) 초기화 void glLoadIdentity( ); 항등행렬로 초기화 초기화 결과 모델 좌표계 = 전역 좌표계 = 시점 좌표계 기하변환을 명시 void glTranslatef(GLfloat dx, GLfloat dy, GLfloat dz); void glScalef(GLfloat sx, GLfloat sy, GLfloat sz); void glRotatef(GLfloat angle, GLfloat x, GLfloat y, GLfloat z); 후위곱셈(PostMultiplication) 전역 좌표계를 기준으로 하는 모델 좌표계의 변환 CTM = CTM • M Ex. glTranslatef(1, 2, 0) (6.43) (6.44) (6.47)

복합변환-pp.272 Ex. glMatrixMode(GL_MODELVIEW); glLoadIdentity( ); glScalef(sx, sy, sz);                                                  glRotatef(theta, vx, vy, vz);                                      glBegin(GL_POINTS); glVertex3f(px, py, pz);                                          glEnd( ); 크기조절 이후 회전? 회전 이후 크기조절? [표 6-1] 행렬조작 함수

glMatrixMode(GL_MODELVIEW); glLoadIdentity( ); 물체 변환에 의한 모델링-pp.274 코드 glMatrixMode(GL_MODELVIEW); glLoadIdentity( );           glRotatef(45, 0.0, 0.0, 1.0);  물체 변환의 역순 glTranslatef(10.0, 0.0, 0.0); glVertex3f(Px, Py, Pz);  전역좌표 기준의 물체변환 P' = T•P P'' = R•P' = R•T•P [그림 6-48] 물체 변환에 의한 모델링

좌표계 변환에 의한 모델링-pp.274 코드 glMatrixMode(GL_MODELVIEW); glLoadIdentity( );           glRotatef(45, 0.0, 0.0, 1.0);   좌표계 변환과 동일 순서 glTranslatef(10.0, 0.0, 0.0); glVertex3f(Px, Py, Pz);   모델 좌표계를 변환 직전의 모델 좌표계를 기준으로 변환 CTM = I•R CTM = CTM•T = I•R•T P'' = CTM•P = I•R•T•P    [그림 6-49] 모델 좌표계 변환에 의한 모델링

함수호출 순서-pp.276 [그림 6-50] 행렬연산 순서 [그림 6-51] 함수호출 순서

행렬 스택(Matrix Stack)-pp.278 [그림 6-57] 오렌지 매달기 [표 6-2] 오렌지 매달기 프로그램 좌표계를 (d)로 되돌리려면 어떻게 하는가 -> 스택

행렬 스택 (계속) Push, Pop [그림 6-58] 지엘의 푸시, 팝

행렬 스택 (계속) [그림 6-59] 오렌지 매달기 프로그램의 스택 변화

행렬 스택 (계속) 일반적 형태 glPushMatrix( ); glTranslatef( ); glRotatef( ); glScalef( ); ... Draw_TransformedObject( ); glPopMatrix( );                                                                                                            [그림 6-60] 일반적인 스택함수 호출

계층구조 모델링-pp.283 void drawArm( ){ glMatrixMode(GL_MODELVIEW);   glLoadIdentity( );                          전역 좌표계 = 모델 좌표계   Draw_Body( );                          몸체 그리기   glPushMatrix( );                          전역 좌표계 저장       GoToShoulderCoordinates( );           어깨 기준 모델 좌표계       Draw_UpperArm( );                  위 팔 그리기       glPushMatrix( );                      어깨 기준 모델 좌표계 저장           GoToElbowCoordinates( );        팔꿈치 기준 모델 좌표계           Draw_LowerArm( );               아래팔 그리기           glPushMatrix( );                   팔꿈치 기준 모델 좌표계 저장              GoToWristCoordinates( );      손목 기준 모델 좌표계              Draw_Hand( );               손 그리기          glPopMatrix( );                   팔꿈치 좌표계 복원      glPopMatrix( );                       어깨 좌표계 복원 glPopMatrix( );                            몸체 좌표계 복원 } [그림 6-61] 계층 [그림 6-62] [그림 6-63] II [그림 6-64] III

계층구조 모델링 (계속) 계층구조 트리 관통 현 좌표계 저장을 위해서 Push 직전 좌표계 복원을 위해서 Pop [그림 6-66] 좌표계 [그림 6-67] 계층구조 트리

계층구조 모델링 (계속) 캐릭터 생성을 위한 전신 계층구조 트리 Pelvis http://upload.wikimedia.org/wikipedia/commons/7/78/3D_Male_Skeleton_Anatomy.png Pelvis

계층구조 모델링 (계속)-pp.287-290 태양계(Solar System) http://www.gamedev.net/reference/programming/features/oglch3excerpt/page9.asp Revolution (Day/Year) Rotation (Time/Day) Sun Parent Earth Son (0,0,0) Parent Translation (0.7, 0.0, 0.0) 0.2 Revolution (Time/Day) Moon Son [그림 6-69] 태양, 지구, 달 좌표계

계층구조 모델링 (계속)-pp.287-290 태양계(Solar System) 구현 수성, 금성, 지구, 화성, 목성, 토성, 천왕성, 해왕성 모델링 모든 행성들의 크기(Size), 색상(Color) 및 회전 각도(Angle)는 상이함 태양(Sun)으로부터 모든 행성들까지의 각 거리는 적당히 설정 모든 행성들은 태양(Sun)을 중심으로 Z축 기준으로 회전 마우스 왼쪽 버튼 클릭 시 실행(Play), 오른쪽 버튼 클릭 시 정지(Stop) 키보드의 상하좌우 버튼을 이용한 카메라 이동 및 줌인/아웃 극 좌표계 사용 : 태양이 항상 화면의 중앙에 위치 토성 : 행성의 고리 제작 Using the Quadrics 참조 : http://www.gisdeveloper.co.kr/431

계층구조 모델링 (계속) Robot Arm : Robot.c 참조 http://www.opengl.org/resources/code/samples/redbook/ http://www.gamedev.net/reference/programming/features/oglch3excerpt/page9.asp Scale : Parent의 값을 기준으로 측정 Robot Arm with Fingers glPushMatrix(); glTranslatef (-1.0, 0.0, 0.0); // Pivot 지정 및 객체 이동 glRotatef ((GLfloat) shoulder, 0.0, 0.0, 1.0); // 원점을 기준으로 회전 glTranslatef (1.0, 0.0, 0.0); // Pivot으로 지정할 위치를 원점으로 이동 glPushMatrix(); // 원점을 기준으로 객체 생성 및 축소/확대 glScalef (2.0, 0.4, 1.0); glutWireCube (1.0); glPopMatrix(); glTranslatef (1.0, 0.0, 0.0); // Pivot 지정 및 객체 이동 glRotatef ((GLfloat) elbow, 0.0, 0.0, 1.0); // 원점을 기준으로 회전

계층구조 모델링 (계속) Robot Arm : Robot.c 참조 (계속) XYZ 축 좌표계를 표현 glColor3f(1.0, 0.0, 0.0); glBegin(GL_LINES) glVertex3f(-2.0, 0.0, 0.0); glVertex3f(2.0, 0.0, 0.0); // X축 라인 glEnd(); glColor3f(0.0, 1.0, 0.0); glVertex3f(0.0, -2.0, 0.0); glVertex3f(0.0, 2.0, 0.0); // Y축 라인 glColor3f(0.0, 0.0, 1.0); glVertex3f(0.0, 0.0, -2.0); glVertex3f(0.0, 0.0, 2.0); // Z축 라인

지엘의 시점 변환- 시점 변환-pp.291 시점 좌표계 [그림 6-72] 지엘 파이프라인

전역 좌표계 원점을 향한 방향이 시점 좌표계의 z축 단순 시스템-pp.292 카메라 위치 = 시점 좌표계 원점 전역 좌표계 원점을 향한 방향이 시점 좌표계의 z축 z축에 수직으로 서 있는 면= 투상면(Projection Plane, View Plane) 투상면 내부에 뷰 윈도우(View Window)= 카메라 필름 시점 좌표계 y축 = 뷰 윈도우의 y축과 평행. y-z 평면에 수직인 방향으로 x축 [그림 6-73] 단순한 시점 좌표계

지엘의 시점 좌표계-pp.296 void gluLookAt( GLdouble eyex, GLdouble eyey, GLdouble eyez, // 카메라의 위치 GLdouble atx, GLdouble aty, GLdouble atz, // 카메라가 바라보는 초점의 위치 GLdouble upx, GLdouble upy, GLdouble upz); // 카메라의 기울임(Orientation) [그림 6-80] 지엘의 시점 좌표계 http://www.xmission.com/~nate/tutors.html

시점 좌표, 전역 좌표, 모델 좌표-pp.297 PWCS = M•PMCS PVCS = V•PWCS = V•M•PMCS 시점변환 함수의 위치 glMatrixMode(GL_MODELVIEW); glLoadIdentity( );                                           I       gluLookAt(0.2 0.0, 0.0,  0.0, 0.0, -100.0,  1.0, 1.0, .0);     V       glRotatef (45, 0.0, 1.0, 0.0);                                  M       glutWireCube(1.0);                                          PMCS                                         [그림 6-81] 뷰행렬과 모델행렬

시점 변환 예제 및 응용-pp.298-299 예제 : 시점 좌표계 설정에 따른 물체 모습의 변화 관찰 응용 : gluLookAt 함수를 이용 Keyboard Callback 함수로 구현 Camera의 위치를 제어하여 Object(Teapot)가 Zoom In/Out 효과가 나타나게 구현 Object(Teapot)의 위치, Camera가 바라보는 Focus의 위치는 고정, Camera를 상/하/좌/우 로 이동하게 구현 Camera의 위치, Object(Teapot)의 위치는 고정, Camera가 바라보는 Focus의 위치를 상/하/좌/우 로 이동하게 구현 Object(Teapot)의 위치 및 Camera의 위치, Camera가 바라보는 Focus의 위치 고정, Camera의 Up Vector(Shutter의 위치)를 자유자재로 회전할 수 있게 구현

시점 설정에 의한 애니메이션-pp.300 Orbit(궤도) : 물체를 중심으로 카메라를 회전시키는 것 Polar Coordinate System(극 좌표계) 원점과 반지름(Radius), 방위각(Azimuth Angle), 고도각(Elevation Angle) 등의 요소를 사용하여 좌표를 표시하는 것 Void PolarView(GLfloat radius, GLfloat elevation, GLfloat azimuth, GLfloat twist) { glTranslatef(0.0, 0.0, -radius); glRotatef(-twist, 0.0, 0.0, 1.0); glRotatef(-elevation, 1.0, 0.0, 0.0); glRoatef(-azimuth, 0.0, 0.0, 1.0); }  [그림 6-85] 방위각과 고도각 [그림 6-86] 극좌표계 시점

비행 시뮬레이션-pp.293 Roll = z 축 기준 회전 Pitch = x 축 기준 회전 Yaw = y 축 기준 회전 [그림 6-78] Roll, Pitch, Yaw Roll = z 축 기준 회전 Pitch = x 축 기준 회전 Yaw = y 축 기준 회전 각도 변화에 따라서 새로운 축을 x, y, z축으로 하는 시점 좌표계가 형성 조종사의 눈에 보이는 모든 물체는 변화된 새로운 시점 좌표계를 기준으로 변환

비행 시뮬레이션(계속)-pp.302 비행 시뮬레이션 함수 Void PilotView(GLfloat roll , GLfloat pitch, GLfloat yaw) { glRotatef(roll, 0.0, 0.0, 1.0); glRotatef(pitch, 0.0, 1.0, 1.0); glRotatef(yaw, 1.0, 0.0, 0.0); glTranslatef(-x, -y, -z); }  [그림 6-88] Tilt, Pan, Roll, Dolly [그림 6-89/90] 원위치, 결과 I [그림 6-91/92] Dolly, 결과 II