Geometric Transformations

Slides:



Advertisements
Similar presentations
3. 메소드와 변수 SCJP 자격증 프로젝트 발표자 : 최선웅. 1. 메 소 드 개 념 2. 메 소 드 양 식 3. 메 소 드 변 수 4. 메 소 드 예 제 5. 참 고 문 헌 / 자 료 목 차.
Advertisements

© 2010 인피니티북스 All rights reserved 제 7 장 클래스의 활용 C++ Espresso.
7 장 프렌드와 연산자 중복 1 명품 C++. 친구란 ? 2 우리 집 냉장고 내 침대 우리 집 TV 우리 집 식탁 친구 친구 ? 내 가족의 일원은 아니지만 내 가족과 동일한 권한을 가진 일원으로 인정받은 사람.
프로그래밍 개론 Ⅰ 제 3장. 클래스와 객체의 사용 ①.
이산수학(Discrete Mathematics)
01_ 가상 함수를 사용한 다형성의 구현 02_ 오버라이딩
Mathematics for Computer Graphics
OpenGL Programming (III) 1. Drawing in 3D 2. Manipulating 3D Space
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
ㅎㅎ 구조체 C++ 프로그래밍 기초 : 객체지향의 시작 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스
클래스 class, 객체 object 생성자 constructor 접근 access 제어 이벤트 event 처리.
Chaper 2 ~ chaper 3 허승현 제어시스템 설계.
DirectX9를 이용한 3D GAME 프로그래밍 입문
Two-Dimensional Geometric Transformations
Chap07 상속 Section 1 : 상속의 개요 Section 2 : 멤버 변수의 상속
Lecture #7 제 4 장. 기하학적 객체와 변환 (2).
기하학적 객체와 변환.
4장 기하학적 객체와 변환 – OpenGL 변환 학습목표 OpenGL 에서 어떻게 변환을 수행하는지 OpenGL 행렬모드 회전
최윤정 Java 프로그래밍 클래스 상속 최윤정
C++ Espresso 제10장 프렌드와 연산자 중복.
Ch. 1 선형대수학: 행렬, 벡터, 행렬식, 선형연립방정식
7장 배열 ②.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
기초 이론.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
명품 C++ 7장 프렌드와 연산자 중복.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
정적 멤버 변수/정적 멤버 함수 - friend 함수/클래스 template
C++ Espresso 제12장 템플릿.
Homework Hierarchical bounding volume
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
Java 6장. 클래스 : 속성 public class SumTest {
Lesson 7. 클래스와 메소드 - 1.
컴퓨터 프로그래밍 실습 #6 제 4 장 클래스 작성.
공학컴퓨터프로그래밍 Python 염익준 교수.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
13. 연산자 오버로딩.
7장 인터페이스와 추상 클래스.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
어서와 C언어는 처음이지 제14장.
강원대학교 공과대학 제어계측공학과 2010년도 제2학기
4th HomeWork Guide (ver2.0)
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
명품 C++ 9장 가상 함수와 추상 클래스.
3장. 변수와 연산자 교안 : 전자정보통신 홈페이지 / 커뮤니티/ 학술세미나
Lesson 2. 기본 데이터형.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
2장. 변수와 타입.
자바 가상 머신 프로그래밍 Chap 10. 자바 컴파일링의 안쪽 ② Pslab 오민경.
Chapter 02. 자바 기본 문법.
멤버함수 중첩( 복사 생성자 ) - 연사자 중첩 - 동적 메모리를 가지는 클래스를 지원 하도록 멤버 함수 작성
JA A V W. 06.
3D Shapes 3개 핵심 Properties가 존재 1.Material 표면의 재질을 설정합니다.
12. 상속 : 고급.
객체기반 SW설계 팀활동지 4.
에어 PHP 입문.
Chapter 13. 템플릿(Template) 1
클래스 : 기능 CHAPTER 7 Section 1 생성자(Constructor)
중복 멤버의 처리 조 병 규 한 국 교 통 대 학 교 SQ Lab..
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
이산수학(Discrete Mathematics)
Static과 const 선언 조 병 규 한 국 교 통 대 학 교 SQ Lab..
Geometry and Algebra of Projective Views
2.가상머신의 탐험 도구, Oolong에 대하여 ps lab 김윤경.
1. 지역변수와 전역변수 2. auto, register 3. static,extern 4. 도움말 사용법
29장. 템플릿과 STL 01_ 템플릿 02_ STL.
OOP Practices OOP presentation 6 작성자 Kimjinsik 소속 Mobile computing Lab
Pointers summary.
Presentation transcript:

Geometric Transformations

Rigid Transformations A rigid transformation T is a mapping between affine spaces T maps vectors to vectors, and points to points T preserves distances between all points T preserves cross product for all vectors (to avoid reflection) In 3-spaces, T can be represented as

Rigid Body Rotation Rigid body transformations allow only rotation and translation Rotation matrices form SO(3) Special orthogonal group (Distance preserving) (No reflection)

Rigid Body Rotation R is normalized R is orthogonal The squares of the elements in any row or column sum to 1 R is orthogonal The dot product of any pair of rows or any pair columns is 0 The rows (columns) of R correspond to the vectors of the principle axes of the rotated coordinate frame

3D Rotation About Arbitrary Axis

3D Rotation About Arbitrary Axis Rotate u onto the z-axis

Taxonomy of Transformations Rigid Affine Projective

Vector, Matrix Coding

Class 3차원 Vector와 4x4 Matrix Class를 만들어 본다 class Vector3 { public: float p[3]; }; class Mat4x4 { public: float p[4][4]; };

더 확장된 편리한 class 설계? 연산자 오버로딩!!!

complex 클래스 연산자 오버로딩을 위한 예제 클래스 // 복소수 클래스 class Complex { public: // 생성자 Complex(int realPart, int imaginaryPart); // 접근자들 int SetReal(int realPart); int SetImaginary(int ImaginaryPart); int GetReal() const {return real;} int GetImaginary() const {return imaginary;} private: int real; // 실수부 int imaginary; // 허수부 };

복소수간 더하기? 복소수 간 더하기는 실수부 따로, 허수부 따로! a = 1+3i b = 4+5i 더하기의 의미가 다르다! 자신이 만든 객체 간의 연산을 정의할 수 있을까? a = 1+3i b = 4+5i a+b = (1+4) + (3+5)i  연산자 오버로딩

연산자 오버로딩 객체 안에 연산자에 따른 함수를 정의하는 것 기본형: 용법: 반환값 = 자신(this) + right class Test { Test operator+ (Test& right); }; Test operator+ (Test& right) … }

피연산자가 두 개인 연산자(1) 피연산자가 두 개인 + 연산자를 오버로딩 하는 예 class Complex { // 중간 생략 Complex operator+(const Complex& right) // 실수부와 허수부를 각각 더한다. int real = this->real + right.real; int imag = this->imaginary + right.imaginary; // 결과를 보관한 복소수 객체를 반환한다. return Complex(real, imag); }

피연산자가 두 개인 연산자(2) 피연산자가 두 개인 + 연산자를 오버로딩 하는 예 Complex c1(1, 1); // + 연산자를 사용한 덧셈 c3 = c1 + c2; // c3 = (3, 3) c3 = c1.operator +(c2);

피연산자가 두 개인 연산자(3) 피연산자와 인자의 매칭 [27-1]

연습 Vector의 빼기 연산을 오버로딩 해보자 Vector의 Dot Product 연산을 오버로딩 해보자

일반함수를 사용한 오버로딩 연산자는 꼭 맴버 함수여야 하는가? 일반 함수를 사용할 수 있다.

일반 함수를 사용한 연산자 오버로딩(1) 멤버 함수가 아닌 일반 함수를 사용해서 + 연산자를 오버로딩 하는 예 Complex operator+(const Complex& left, const Complex& right) { // 실수부와 허수부를 각각 더한다. int real = left.real + right.real; int imag = left.imaginary + right.imaginary; // 결과를 보관한 복소수 객체를 반환한다. return Complex(real, imag); }

일반 함수를 사용한 연산자 오버로딩(2) 피연산자와 인자의 매칭 [27-2]

일반 함수를 사용한 연산자 오버로딩(3) 멤버 함수가 아닌 일반 함수를 사용해서 + 연산자를 오버로딩 하는 예 !!! .real과 .imaginary는 private!!! Complex operator+(const Complex& left, const Complex& right) { // 실수부와 허수부를 각각 더한다. int real = left.real + right.real; int imag = left.imaginary + right.imaginary; // 결과를 보관한 복소수 객체를 반환한다. return Complex(real, imag); }

friend 함수의 등록 친구 함수: 친구 함수 선언법: friend 사용 하여 함수등록 일반 함수 이지만 객체의 private 맴버 함수, 변수를 접근할 수 있는 함수 친구 함수 선언법: friend 사용 하여 함수등록 class Complex { // 중간 생략 friend Complex operator+(const Complex& left, const Complex& right); };

일반 함수를 사용한 연산자 오버로딩(4) 멤버 함수가 아닌 일반 함수를 사용해서 + 연산자를 오버로딩 하는 예 int main() { Complex c1(1, 1); Complex c2(2, 2); Complex c3(0, 0); // + 연산자를 사용한 덧셈 c3 = c1 + c2; // c3 = (3, 3) c3 = operator +(c1, c2); return 0; }

연산자 오버로딩의 규칙 오버로딩이 가능한 연산자가 제한되어 있다. 기본 타입의 연산 방법은 바꿀 수 없다. 피연산자가 모두 기본 타입인 연산자 함수는 만들 수 없다. 기존 연산자의 의미를 헤치지 않는 것이 좋다. 예) + 연산자를 뺄셈의 용도로 오버로딩 하는 것은 좋지 않다.

OpenGL Geometric Transformations glMatrixMode(GL_MODELVIEW);

OpenGL Geometric Transformations Basic Transpormation: glLoadIdentity(); glTranslatef(tx, ty, tz); glRotatef(theta, vx, vy, vz); angle-axis (vx, vy, vz) is automatically normalized glScalef(sx, sy, sz); glLoadMatrixf(Glfloat elems[16]); Multiplication glMultMatrixf(Glfloat elems[16]); The current matrix is postmultiplied by the matrix Column major

OpenGL Geometric Transformations Getting the current matrix value: glGetFloatv (GL_MODELVIEW_MATRIX, GLfloat elems[16]); Column major 4 8 12 1 5 9 13 2 6 10 14 3 7 11 15 GLfloat mat [16]; glGetFloatv (GL_MODELVIEW_MATRIX, mat);

OpenGL Geometric Transformations Matrix Direct Manipulation: glLoadMatrixf(GLfloat elems[16]); Column major glMultMatrixf(GLfloat elems[16]); The current matrix is postmultiplied by the matrix 4 8 12 1 5 9 13 2 6 10 14 3 7 11 15 glLoadIdentity(); glMultMatrixf (M1); glMultMatrixf (M2); M = M1∙M2

OpenGL GLUT Animation Function GLUT Idle Callback fuction: Idling: when there is nothing to do. Redraw the scene: void MyIdle() { … // things to do … // when Idling } glutIdelFunc ( MyIdle ); glutPostRedisplay ( );

바람개비(풍차)만들기

Hierarchical Modeling A hierarchical model is created by nesting the descriptions of subparts into one another to form a tree organization

OpenGL Matrix Stacks Stack processing The top of the stack is the “current” matrix glPushMatrix(); // Duplicate the current matrix at the top glPopMatrix(); // Remove the matrix at the top

Homework #2 다각형을 이용하여 움직이는 2차원 아름다운 애니메이션 만들기 Push/Pop Matrix를 사용하여 2단계 이상의 계층적인 움직임 디자인을 할 것 Ex): 태양계 시스템 (태양지구달) 숙제제출: 이메일 제출 (Screenshot, code, report) 숙제마감: 4월 15일 목요일 23시59분까지