2011.01.13 23:32
2011.01.13 23:10




MapEditer 동영상 과 실행파일입니다.
신고
Posted by 우엉 여왕님!! ghostkyow
2011.01.13 22:48



TerrainEditer 동영상과 실행파일 입니다.
신고
Posted by 우엉 여왕님!! ghostkyow
2011.01.13 22:46




SoftwareRender 동영상과 실행 파일입니다.
신고
Posted by 우엉 여왕님!! ghostkyow
2011.01.13 22:23


DBTool 동영상과 실행 파일입니다.
신고
Posted by 우엉 여왕님!! ghostkyow
2010.08.08 03:07

1. HiFramework ?

프로그램 개발 할 때 쓰이는 객체지향 프레임워크이다.

 

HiFramework 의 특징

1.     객체지향 프레임워크로 확장성과 융통성이 강하다.

2.     새로운 기능은 모듈을 상속받아 쉽게 추가가 가능하다.

3.     ModuleAbstract Factory Pattern을 사용하였다.

4.     Manager 클래스는 SingleTon Pattern을 사용하였다.

5.     Module간 의 상호작용을 위해 메시지 매니저와 라우트기능 을 만들어서 상호작용이 가능하게 하였다.

6.     Xml스크립트를 이용하여 필요한 모듈을 서술 한 뒤 해당 모듈의 DLL을 동적으로 로딩이 가능하다.

7.     Xml을 수정하면 exe를 재 컴파일 하지 않아도 프로그램이 수정 가능하다.

8.     커널을 수정하지 않아도 확장이 가능하다.

 

 

 

2. HiFramework 의 개발 환경

● 하드웨어

- CPU : Intel Core Duo 2.42Ghz

- RAM : DDR3 2GB

- Graphic : Nvidia Geforce 9400M

● 소프트웨어

- OS : Window XP, Windows Vista

- Compiler : MSVC80

- SDK : Microsoft DirectX SDK(2007)


 

3. HiFramework의 구조

-HiFramework Classdiagram-

 

HiObject

-HiObject는 모든 객체들의 상위 클래스이다.

이 클래스가 하는 주요 역할은 객체의 인덱스와 객체의 이름을 갖는 역할을 한다.

그리고 그 객체의 이름은 다른 객체들과의 상호 작용을 위해 사용된다.

또한 이 클래스를 상속 받은 객체들은 HandleMessage라는 함수를 상속받게 되어서 MessageManager를 이용하여 정보를 주고 받을 수 있다.

 

HiContainer

이 클래스는 클래스간의 값 복사 기능인 라우트를 위한 클래스이다.

이 클래스에서 Container는 각 클래스들이 저장되어있다. 그리고 Container가 가지고 있는 Field도 가지고 있을 수 있다.

값의 복사가 이루어질 때 현재 자신이 가지고 있는 Field가 아니면 Container내에 lsitContainer에서 검색을 해서 맞는 Field 를 검색해서 값의 복사를 하기 위함이다.

 

-함수-

AddField,AddToParent,SendEvent,SendEventAll

 

AddField – Container가 가지고 있는 Field를 리스트에 추가.

AddToParent-Container  Container리스트에 추가

SendEvent-인자로 받은 정보의 Field의 라우트 기능 시작

SendEvent-현재 가지고 있는 모든 Field의 라우트 기능 시작




HiRenderer

이 클래스는 렌더링 관련된 클래스의 추상 클래스이다.

이 클래스를 상속받아서 렌더러를 구현하게 한다.

크게 아래 함수들을 재정의 해서 렌더러를 구현하게 된다.

 

-함수-

Initalize, BeginScene, EndScene, Terminate

 

Initalize- 렌더러의 초기화를 하는 함수.

BeginScene- 화면을 그리기 위해 셋팅 하는 함수.

EndScene- 화면을 그린뒤 업데이트 해주는 함수이다.

Terminate- 렌더러에서 쓴 메모리를 해제 해주는 함수.

 

 

(RenderType은 지금 현재 크게 DirecX, Gamebryo, OpenSceneGraph가 있다. 그리고 DirectX HiFrameworkCal3Dviewer가 있고, GamebryoObejctTool이 있다. OpenSceneGraph는 현재 OpenSceneGraph의 예제를 컨버팅 한 모듈들이 있다.)








HiRouteManager

HiRouteManager HiObject를 상속받은 Framework내에 Route를 관리 하는 매니저 클래스이다.(Route란 모듈간의 값을 복사하는 기능)

이 클래스의 객체는 하나만 생성해야 되기 때문에 디자인 패턴 중 SingleTon Pattern을 사용 하였다.

HiRouteManager의 주요 함수는 아래와 같다.

 

-함수-

Create,  AddRoute,  RemoveRoute

 

Create - XML스크립트의 내용을 파싱 하여 모듈간 Field를 연결한다.

AddRoute – Route의 이름과 연결된 모듈을 테이블에 저장.

RemoveRoute테이블에 저장된 라우트를 제거한다.

 




HiModule

Framework에서 가장 중요한 기능 역할을 맞고 있고 추상 클래스인 Module이다. (ex. 캐릭터를 관리하는 모듈 or 맵을 띄우는 모듈 or 컨트롤러를 담당하는 모듈)

이 모듈 클래스를 상속받아 재정의 하여 프로그램에 사용될 기능들을 만든다. 여기서 중요한 역할을 하는 함수는 아래와 같다.

 

-함수-

ParseXml,  PostConfig, PreConfig, Render, Update, Terminate

 

ParseXml-XML에서 모듈에 따로 쓰일 내용이 기재 되었다면 이 함수 내에서 XML에 있는 내용을 파싱 하는 역할을 한다.

PreConfig-Module내에서 RenderType이 필요없는 자료들을 초기화 할 때 쓰이는 초기화 함수이다.(ex.변수초기화 등)

PostConfig-Module내에서 RenderType이 필요한 자료들을 초기화 할 때 쓰이는 함수이다.(ex. TextureLoading)

Update-Module내에서 처리 할 내용들을 연산 해주는 함수이다.

(ex.애니메이션 업데이트 등)

Render-Module내에서 화면에 그릴 때 쓰이는 함수이다. (Module이 화면에 뿌리는 기능을 가지지 않은 모듈이면 재정의를 하지 않아도된다)

Terminate-Module에서 사용한 메모리들을 해제 시켜주기 위한 함수.






HiModuleManager

HiModuleManager HiObject를 상속받은 Framework내에 Module들을 관리하는 중요한 매니저 클래스이다.

이 클래스의 객체는 RouteManager와 같이 하나만 생성되어야 하기 때문에 Singleton Pattern을 사용 하였다.

HiModuleManager의 주요 역할은 Module들의 Config Update 그리고 Render를 해주는 역할을 한다. 중요한 함수는 아래와 같다.

 

-함수-

AddModule,Create,FindModule ,Load,PostConfigAll,PreConfigAll

,RenderAll,TerminateAll,UpdateAll

 

Create-XML내에 있는 내용을 파싱하여 class이름과 id 그리고 active여부를 알아 낸 뒤 Load함수를 이용하여 로드를 한다. 그리고 로드 된 module AddModule 함수를 이용하여 테이블에 추가한다.

Load-Create함수에서 class이름을 보내주면 class이름을 이용하여 dll파일을 로드 한다.

AddModule-인자로 HiModule을 받는데 이것을 받아서 Module 테이블에 push_back해주는 역할을 한다.

FindModule-FindModule은 인자에 따라 찾고자하는 Module을 찾은뒤 리턴해주는 함수이다.

PostConfigAll-테이블에 등록된 Module들의 PostConfig를 실행.

PreConfigAll-테이블에 등록된 Module들의 PreConfig를 실행.

RenderAll-테이블에 등록된 Module들의 Render를 실행.(여기서 Render Active True Module들만 렌더를 실행)

UpdateAll-테이블에 등록된 module들의 Update를 실행(여기서 Update Render와 같이 Active에 따라 Update를 실행)

TerminateAll-사용한 module들의 Terminate를 수행








HiField

HiField Module끼리 값 복사에 사용되는 값을 가지고 있을 객체이다. 이 클래스를 받아서 Module에서 필요한 Field를 만드는데 예를 들어서 저 아래와 같은 HiSFVec3f이다. HiSFVec3fm_vStorage(xyz값을 가지고 있는 Vector)를 가지고 있는 파생클래스이다. 복사는 m_iDirty(이하 Dirty)라는 변수에 의해서 값의 복사가 이루어진다. Dirty Field내의 값이 바뀌었을 때 값이 바뀌게 된다. 그럼 그때만 복사가 이루어지게 된다.(값이 바뀌지 않았을 때 쓸데없이 값의 복사가 이뤄지는 비용 감소를 위해 사용)

 

-함수-

Validate, Connect, DisConnect, Copy

 

Connect- 인자로 HiField를 받는다. 인자로 받은 Field In/Output push_back한다.

DisConnect-Connect와 같은 인자를 받는다. 받은 인자를 In/Output에서 제거 한다.

Copy가상 클래스이다. 이 함수는 인자로 Field를 받는다. 받은 인자로 현재 자신의 Storage값을 변경한다.(복사가 다른 필드에 따라 재정의를 하여 복사 하는 방법을 재정의 할 수 있도록 설계)

Validate-직접 Copy를 호출하여 값을 변경 한다. 값이 변경 되었으니 Dirty의 값도 변경 하는 함수.





HiMessageManager

MessageManagerHiObject를 상속받고 HandleMessage를 가지고 있는 모든 객체들을 상호 작용 하기 위하여 만든 클래스이다.

이것 또한 매니져 클래스이며 Singleton Pattern으로 구현 되었다.

어디서든 DispatchMessage를 이용해 다른 객체에 메시지를 보낼수 있다. 그리고 일정 시간 뒤에 메시지를 보내도록 하는 것도 구현이 되어있다. 메시지는 int형 뿐만이 아닌 void*를 이용해 어떠한 자료도 주고 받을수 있도록 구현이 되어있다.(방법은 딜레이가 있는 메시지는 자료구조 Q에 담아 놓고, 딜레이시간이 되었을 때 pop해서 메시지를 전달 하는 방법)

 

-함수-

DispatchMessage,DispatchDelayedMessage,Discharge

 

Discharge-인자로 메시지를 Receiver 객체와 보낼 메시지를 받는다. 그리고 그 Receiver에게 메시지를 보내는 Send역할을 하는 함수

DispatchMessage-인자로 보낼 객체의 id 그리고 받을 객체의 id 그리고 딜레이 시간을 받아서 메시지를 보낼수 있도록 하는 함수

DispatchDelayedMessage-자료구조 Q에 담긴 메시지들을 시간이 되었을 때 pop하여 Discharge해주는 함수




HiViewer

HiViewer Kernel역할을 담당하는 클래스이다.

이 클래스 또한 Singleton Pattern으로 이루어져있다. 이 클래스가 하는 역할을 프로그램에 대한 초기화, 프로그램 루프, 프로그램 종료시 메모리 해제 등을 맡고 있다.

 

-함수-

Config,ParseXml,Run,Terminate

 

ParseXml-XML스크립트로부터 RendererType, Module 파싱 함수

Config-프로그램에 필요한 모든 객체들을 초기화 하는 부분

Run-프로그램 루프에 필요한 Module들을 ModuleManager를 이용해 Update를 해주는 함수

Terminate-사용된 객체들을 메모리 해제 하는 함수





 

신고
Posted by 우엉 여왕님!! ghostkyow
2009.08.20 11:10

많이 부족하지만 잘 봐주시길 바랍니다
신고
Posted by 우엉 여왕님!! ghostkyow
2009.08.18 18:54
2009.08.18 18:51

신고
Posted by 우엉 여왕님!! ghostkyow
2009.08.18 18:50

신고
Posted by 우엉 여왕님!! ghostkyow

티스토리 툴바