전체 글 793

1. 3D 기초 용어

1. 3차원 좌표계(3D Coordinate System) -왼손 좌표계와 오른손 좌표계가 있다. D3D의 경우 기본적으로 왼손 좌표계를 기준으로 하고, OpenGL의 경우, 왼손과 오른손 좌표계를 선택하여 사용할 수 있다.2. 벡터(Vector) -가속도나 속도처럼 크기와 방향을 동시에 표현하는 숫자*스칼라 : 기압과 속력처럼 하나의 값으로 표시 가능한 숫자(방향x) 3. 정점(Vertex) -2차원이나 3차원 공간에서 위치(Position)를 나타내는 점(Point) 4. 변환(Transform) -가장 기본적인 변환에는 이동(Transition), 회전(Rotation), 크기(Scale) 변환이 있다. 이들은 모두 행렬로 표현된다.*이동과 회전만으로 이루어진 행렬을 아핀변환(Affine Trans..

[해외탐방 3기] 5~6일차_유니버셜 스튜디오

LA Universial Studio Hollywood 오늘의 일정은 LA 유니버셜 스튜디오 투어입니다. 하루종일 돌아다녀도 다 둘러보기 힘들다고 하여 아침일찍 나와 오픈을 기다렸습니다. 유니버셜 스튜디오는 유명영화의 세트 및 특수촬영장면, 스턴트 쇼 등을 관람할 수 있는 일종의 놀이공원입니다. 하루종일 즐겼는데도, 시간이 아깝지 않을 퀄리티와 리얼리티를 자랑했답니다. 입구 앞에는 유니버셜 스튜디오의 상징, 유니버셜 스튜디오 로고가 새겨진 지구본이 돌아가고 있습니다. 저희도 이 순간을 기억하기 위해 단체 사진을 찍고 개인별 포토타임을 가졌습니다. 입장 전 안내도를 보고 모두 기구의 위치를 파악하고 동선을 미리 계획해뒀습니다. 유니버셜 스튜디오는 크게 3가지 코스로 구분되어 있습니다. 스튜디오 투어는 트램..

일상/여행 2014.09.24

[해외탐방 3기] 4일차_샌프란시스코~LA 일정

1. Computer History Museum 넷째 날 아침, 우리의 첫 일정은 컴퓨터의 모든 역사를 한 눈에 볼 수 있는 컴퓨터 히스토리 박물관에 방문했습니다. 컴퓨터 히스토리 박물관은 세계 최대 규모의 컴퓨터 박물관입니다. 입장전 단체사진 찍고, 가이드의 설명과 함께 본격적인 관람 시작! 컴퓨터 박물관의 첫 전시실에 전시되어 있는 것은 다름 아닌 주판이었습니다. 컴퓨터(Computer)란 '계산하다'라는 뜻의 'compurate'에서 유래된 만큼 컴퓨터 이전의 전통적인 계산 도구인 주판이 국가별로 전시되어 있습니다. 실제 전시품은 고대의 주판을 어떻게 사용하는지 설명이 자세히 나와 있었고, 실제 전시품을 이용해 계산도 해볼 수 있었습니다. 본격적인 컴퓨터의 탄생을 소개해 놓은 코너입니다. 기계식 계..

일상/여행 2014.09.23

MFC 기초

MFC란?Microsoft Foundation Class의 약자로 윈도우 운영체제 환경에서 GUI 프로그램을 쉽고 빠르게 개발하기 위한 클래스 라이브러리입니다. 기본적으로 C++언어의 기본 문법을 알고 있어야 한다! MFC 내부구조 이해를 위한 예제File->New->Project, 'Win32프로젝트' 선택 '빈 프로젝트' 체크 후 마침'소스 파일' 마우스 우클릭->추가->새항목 'C++파일(.cpp)'선택 적당한 이름 입력 후 추가다음의 코드를 입력한다.//////////////////////////////////////////////////////// #include class CHelloApp : public CWinApp { public: virtual BOOL InitInstance(); };..

2_new2_예제

예제)메모리 해제가 제대로 되지 않은게 남았는지 자동으로 확인해주는 프로그램Operator new와 Operator delete 재정의 이용,int count = 0; //메모리 할당해준 객체 카운트 세는 변수 //할당한 객체의 파일명, 몇번째 라인인지, 주소, 크기를 저장 struct BLOCK { char file[256]; int line; void* addr; int size; }; BLOCK mem[10000]; // 할당한 메모리 정보를 관리할 배열 //operator new, operator delete 재정의 void* operator new( size_t sz, char* file, int line) { void* p = malloc(sz); strcpy(mem[count].file, f..

2_new1_new,operator new, operator delete

1. new의 정확한 동작방식1. operator new()라는 함수를 사용해서 메모리 할당2. (1)이 성공하고 객체라면 생성자 호출3. C의 메모리 주소를 해당 타입으로 캐스팅해서 리턴. 2. 생성자/소멸자를 호출하지 않고 메모리만 할당하는 방법은?Point* p = static_cast(operator new(sizeof(Point))); operator delete(p);위의 방법을 이용하면 생성자는 호출되지 않고 메모리만 할당되는 것을 알 수 있다. 3. operator new()를 재정의 해서 메모리 할당을 변경 가능하다(new 자체를 재정의 하는게 아니다) #include using namespace std; void* operator new( size_t sz) { cout

1_this3_멤버 변수의 포인터

멤버 변수의 포인터class Dialog { public: int color; void Close() {} }; int main() { // 멤버 변수의 포인터 만들기. int Dialog::*p = &Dialog::color; printf("%d\n", p); // 0 Dialog dlg; dlg.*p = 10; // dlg.color = 10 으로 컴파일. } 멤버 변수의 포인터의 경우 멤버 함수의 포인터와 마찬가지로 Dialog::(객체명::)을 붙여주면 된다. 접근하는 방법 역시 역참조를 이용, dlg.*p와 같이 접근하면 된다.(객체를 생성해야 접근 가능) 이 때 멤버변수 포인터 p를 출력하면 0임을 확인할 수 있다.Dialog 클래스에 int a를 추가하고 p를 다시 한번 출력해 보자. cla..

1_this2_함수포인터의 this

함수포인터에서 this1. 일반 함수포인터에 멤버함수의 주소를 담을 수는 없다.2. 일반 함수포인터에 static 멤버함수의 주소를 담을 수는 있다. 다음의 예제에서.. class Dialog { public: void Close() {} static void Close2() {} }; void foo() {} int main() { void(*f1)() = &foo; //함수포인터 f1 f1(); (*f1)(); void(*f2)() = &Dialog::Close; // error void(*f3)() = &Dialog::Close2; // ok.. this가 없다. } 함수포인터 f1()는 인수가 없는 void 함수를 담는 함수포인터이다. 위의 그림만 봤을 때 f2(), f3() 역시 일치하는 Clo..

1_ this1

this : 멤버함수를 호출한 객체의 주소를 나타낸다. 1. 일반멤버함수는 첫번째 인자로 this가 추가된다.2. static 멤버함수는 this가 추가되지 않는다. 다음의 Point 클래스에서 class Point { int x, y; public: void set(int a, int b) { x = a; // this->x = a; y = b; // this->y = b; } static void foo(int a) { x = a; } };함수 void set(int a, int b)의 경우 void set(Point* const this, int a, int b)로 컴파일된다. 자신의 객체를 의미하는 this가 추가되고 컴파일된다. 이는 동일한 클래스의 객체가 여러개 생성된다 해도 멤버함수는 하나만..

7. Command Pattern(커맨드 패턴)

Command Design Pattern(커맨드 패턴) Define 커맨드 패턴을 이용하면 요구사항을 객체로 캡슐화 할 수 있으며, 매개변수를 써서 여러 가지 다른 요구 사항을 집어넣을 수도 있습니다. 또한 요청 내역을 큐에 저장하거나 로그로 기록할 수도 있으며, 작업취소 기능도 지원 가능합니다. Structure - 커맨드 객체는 일련의 행동을 특정 리시버하고 연결시킴으로써 요구사항을 캡슐화 한 것을 의미한다.- 행동과 리시버를 한 객체에 집어넣고, 외부에는 execute()메소드 하나만 외부에 공개한다. 이 메소드 호출에 의해 리시버에서 일련의 작업이 처리된다.- 외부에서는 어떤 객체가 리시버인지, 그 리시버가 무슨일을 하는지 알 수 없고 그냥 execute()메소드만 호출하면 요구사항이 처리된다.A..

6. Singleton Pattern(싱글턴 패턴)

Singleton Design Pattern(싱글턴 패턴) Define 싱글턴 패턴은 해당 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴. Structure>- 클래스에서 자신의 단 하나뿐인 인스턴스를 관리하도록 만든다. 그리고 다른 어떤 클래스에서도 자신의 인스턴스를 추가로 만들지 못하도록 한다. 인스턴스가 필요하면 반드시 클래스 자신을 거치도록 한다.- 또한 어디스든 이 인스턴스에 접근할 수 있도록 만든다. - getInstance()메소드는 정적 메소드로 어디서든 호출 가능,- 생성자를 private로 선언하여 외부에 노출이 되지 않도록 한다.Advantage - 시스템 상 전역으로 관리되고 단하나의 클래스에서만 정보가 유지되는 것을 원할 때 사용..