반응형

따로 코딩이 필요 없이 쉐이더만 가지고 테스트해볼 수 있는 유명한 저작툴.

디폴트 쉐이더중에 순수하게 VertexShader에서 위치 셋팅만 해주고 PixelShader에서 빨간색으로 칠해주는 녀석이 있는데

거기서 부터 하나씩 고쳐나가는 재미가 있다.

되나 안되나 보려고 노말하나 추가해서 조명한번 넣어봤더니 바로 처리가 된다 ㅎㅎ

툴에서 추가하는 형식만 취해도 이것 저것 해볼 수 있을 것 같아서 기대가 된다.

순수하게 쉐이더에 집중해서 테스트 해볼 수 있을 것 같다.

유명 무료 모델들도 포함되어 있어서 심심하지 않을 것 같다.

링크 : http://developer.amd.com/gpu/rendermonkey/Pages/default.aspx

 
반응형
Posted by msparkms
,
반응형


3장의 목표는 다음과 같다.

- 정적, 동적 링킹 라이브러리 만들기
- 프로그램과 상호작용을 하는 윈도우 다이얼로그창 사용하기
- 정적 라이브러리로 엔진의 렌더러 개발하기
- DLL을 이용하여 Direct3D 초기화하고 연결하기
- Engine을 이용한 프레임워크 구축하기


3장만 끝나도 오우거 엔진 기본 셋팅처럼 간단한 다이얼로그 창에서 셋팅을 하고
윈도우로 들어가서 Direct3D가 켜지는 예제를 만들 수 있다는 이야기이다!

이번 장이 이 책을 통해서 만들 엔진의 기본 구조이므로 확실히 익히고 넘어가야 한다.



Interface에 대한 설명

Interface를 이용하여 코드를 분리하고 독립적이면서도 재 사용가능한 코드를 짤 수 있음을 설명하고
C++ 문법의 가상함수와 순수 가상함수을 설명하고 추상 클래스를 만드는 부분을 설명한다. 

virtual void MyPureVirtualFunction(void) = 0;



DLL에 대한 설명

DLL실시간에 로드가 가능하기 때문에 재 컴파일이 필요없는 점과 선택적으로 로드가 가능하다는 점이 유용하다.
이런점때문에 일단 실행가능하게 만든뒤 최적화 하기도 편하다.

* DLL을 로드하는 두가지 방법
 

1. 정적라이브러리로 링킹되는 DLL을 부르는 방법
2. 특정 함수 호출을 통해 DLL을 부르는 방법

앞의 방식을 이용하면 DLL의 함수가 추가되거나 변경되었을 때는 다시 컴파일 해야하기 때문에
두번째 방법을 사용할 것이다.

DLL에 선언된 함수를 이용하려면 함수를 선언할 때 __declspec(dllexport)를 명시해 주어야 한다.
다른 방법으로는 .def 파일에 함수의 리스트를 적어 제공하는 것이다.

DLL의 자세한 내용은 윈도우 관련 서적을 한번 보는게 더 좋을 것 같다.
DLL에 대해서도 자세히 한번 정리해서 올려봐야 겠다.



DLL에 있는 클래스를 사용

1. 인터페이스를 상속받은 클래스를 선언한다.
2. DLL에 이 클래스를 구현한다.
3. 이 클래스의 객체를 생성하는 함수를 DLL에 작성한다.
4. 이 함수가 객체를 리턴할 때 인터페이스 타입으로 캐스팅하고 리턴해준다.

이 방법을 통하면 클래스를 DLL에 넣을 수 있고 사용하는 쪽에서는 인터페이스만 알고 있으면 사용가능해진다.



정적 라이브러리를 이용한 렌더러 구현

렌더러 안에서 DLL을 로드해준다.

Direct3D의 생성과 RenderDevice 획득, 생성된 자원들의 해제를 해주고
렌더링관련된 함수들을 연결할 수 있어야한다.

이 정적 라이브러리는 DLL을 만들 때 자동으로 생성되는 정적 라이브러리가 아니라 우리가 따로
DLL을 부르기 위해서 직접 만든 정적 라이브러리이기 때문에 DLL의 장점을 그대로 이용할 수 있다.

이 책의 저자는 다음과 같이 파일을 나누었다.

RenderDevice.h -> 렌더링 관련된 함수들의 인터페이스

Renderer.h       -> DLL을 부르고 Direct3D를 생성, 해제
Renderder.cpp


이름은 렌더러로 칭했지만 결과적으로는 렌더링관련 코드가 구현된 함수들이 있는 DLL을 불러주고 
이 함수들을 사용하기 위한 인터페이스를 제공해주는 역할
로 사용된다.



Direct3D를 위한 DLL 만들기

위에서 만든 RenderDevice 인터페이스를 구현할 DLL을 만들어야 한다.

이 책의 저자는 다음과 같이 파일을 나누었다.

d3d.def             -> DLL 함수들의 목록
d3d.h               -> RenderDevice를 상속받는 클래스 선언
d3d_init.cpp      -> Direct3D 초기화, 해제 관련된 함수들 구현
d3d_enum.cpp  -> Direct3D Enumeration 관련된 함수들 구현
d3d_main.cpp   -> 나머지 함수들 구현


이 저자는 한 클래스에 대해서 기능별로 파일을 쪼개서 cpp를 여러개 만들었다.
한 파일이 너무 긴 것을 싫어하는 취향이기 때문에 이대로 해도되고 각자 알아서 하면 된다.



2부로 넘겨서 정리해보려고 했는데 보니까 위의 내용이 다였다...

현재 구현은 다이얼로그 창과 연동할 필요를 못 느껴서 그냥 초기화 하는 부분만 넣어놓았다.

위에처럼 굳이 cpp파일을 나눠서 할 필요도 없이 그냥 RenderDevice를 생성, 해제해주는 함수를 구현해주고

내부적으로 Direct3D를 초기화해주는 부분만 넣어도 된다.

바로 4장으로 넘어가자!



 
반응형
Posted by msparkms
,
반응형

2장은 비교적 짧은 편이다.

엔진의 직접적인 구현에 대한 내용은 나오지 않고

엔진을 만들기 위한 기본적인 생각과 이 책을 통해 만들엔진의 구조에 대해서 간략히 설명한다.

게임에 종속적이지 않은 엔진을 만들기 위해서는 특정 게임이나 API와 별개로 만들어져야 한다.

엔진에서 사용하는 상수, 구조체등을 따로 다시 만들어야 한다.

그렇지 않으면 특정 게임에 종속적인 엔진이 될 수 밖에 없다.





그 뿐만 아니라 게임에서 사용되는 클래스등을 알고 그 클래스에 대한 처리를 넣어서도 안된다.

CBossEnemy* boss;
renderer->render(boss);

이런식으로 내가 어떤 객체를 그리고자 할 때 그 객체를 넘겨서 그리는 식으로 만든다면 구현부 코드는 깨끗하나

엔진입장에서는 이 클래스를 사용하는 특정 게임용 엔진이 되버린다.

그래서 되도록 범용적인 함수를 제공해야 한다.

render함수에서 버텍스정보와 인덱스정보등을 넘겨받는식으로 만들면

굳이 CBossEnemy란 클래스를 몰라도 무언가를 그려낼 수 있다.

위의 문제점들을 해결하기 위해서 인터페이스 개념을 사용한다.

엔진에서는 인터페이스를 제공하고 이 인터페이스를 이용해 구현하면 

사용하는 쪽에서는 인터페이스를 상속받아서 적절히 구현하거나 사용하면 된다.





또한 엔진은 DirectX든 OpenGL이든 Custom Renderer든 엔진을 사용하는 쪽에서는 

구현부분에 있어서 변화가 있어서는 안된다. 이 또한 엔진 내부에서 인터페이스를 통해서 

각 렌더링 엔진에 맞게 구현해 놓는다면 사용자는 인터페이스만 불러서 사용해주면 된다.





인터페이스와 같은 개념을 사용하다보면 결국 상속을 받아서 사용하게 되는데 상속받은 녀석을 생성하기 위해서는

게임쪽이든 어디든 그 자식 클래스를 알고 있어야 된다. 

Manager등을 두어서 그곳에만 처리하는 식으로 진행이 될 것 같다.

---------------------------------------------------------------------------------------------------------

이 엔진의 목표기능은 4가지이다.

* 효율적인 렌더링
* 키보드등을 통한 입력처리
* 사운드 처리
* 기본 네트워크 처리(Quake 데스매치정도 되는 규모인듯?)


이렇게 4가지를 기본으로 두고 만들어진다.

그래서 엔진 구성도를 보면 4가지 모듈로 나눠져 있음을 알 수 있다.

모듈당 하나의 인터페이스와 이 인터페이스를 구현한 single DLL이 하나씩 존재한다.

현재 DirectX만 사용하는등 구현을 하나만 사용하기 때문인데 아마 더 추가가 된다면 DLL 갯수가 추가 될 것이다.

그리고 각 모듈당 Static Library가 하나씩 붙는데 DLL을 로드해주는 기능으로만 사용된다.

그리고 게임에서 사용할 Helper 클래스와 Helper 함수용으로 Static Library가 두개정도 더 붙는다.

나도 일단은 이 구조를 따를 것이며 더 분리하거나 추가될 것이 있다면 해볼 것이다.

예를 들어 물리 모듈을 추가하거나 AI 모듈을 추가할 수도 있겠다.




이제 본격적인 구현은 3장부터니 정신 똑바로 차리고 해보겠다!!

되는대로 바로바로 올리도록 하겠다. 

3장에서 엔진 기본 틀을 구현해서 창정도는 띄울 것 같고

4장은 SSE를 이용한 수학 라이브러리 구축부분이다.

저번에 SIMD 관련되서 간단하게 공부해 본적은 있는데 이번에 정리해 볼 것 같다. 
반응형
Posted by msparkms
,
반응형
3D Game Engine Programming 1장 부분은 엔진 개발에 직접적인 관련은 없다.

3D 게임 엔진의 정의와 필요성에 대해서 설명한다.

간략하게 게임 개발의 역사를 훑어 보며 하드웨어의 발전에 의해서 개발 패러다임이 로우 레벨의 최적화도 중요하지만

하이 레벨의 장면관리와 같은 데이터 관리 부분도 매우 중요하다는 것을 강조하고 게임엔진의 특징에 대해서 설명해준다.

딱히 정리할 만한 내용은 없다.

2장부터 제대로 엔진을 조금씩 만들어가기 시작할 것이다.

2장은 이 책을 통해 만드려고 하는 엔진의 기본 구성에 대해서 설명될 것이다. 

이왕 만드는거 엔진이름도 본인 마음에 들게 잘 지으라고 하니 생각좀 해봐야 겠다. 
반응형
Posted by msparkms
,
반응형

http://code.google.com/p/libm3/wiki/RenderM3
http://www.sc2mapster.com/assets/ 

 해당 링크는 M3파일을 읽고 난 다음 애니메이션 처리까지 해주는 소스이고

SVN을 땡겨보면 M3파일을 읽어들이는 소스도 있다.

예전에 사용해보려다가 말았었는데 이번에 한번 해봐야겠다.

겸사겸사 스타2도 깔아야지...ㅎㅎ

http://oneclick-code.googlecode.com/svn -> 여기도 M3포맷을 이용하였고 간단한 게임 엔진도 구축되어 있다. 
반응형

'프로그래밍 > 게임 리소스' 카테고리의 다른 글

Open Asset Import Library - Assimp  (0) 2012.09.11
WOW 모델 & 스타2 모델 Import 하기  (0) 2012.09.11
둠3 소스 공개!  (2) 2011.11.23
간단하게 알아보는 SMD File format  (0) 2011.11.08
공개 엔진 모음  (0) 2011.11.07
Posted by msparkms
,
반응형

warning MSB8004: Output Directory does not end with a trailing slash. 란 경고가 계속 뜨길래 자세히 봤더니

말그대로 Output Directory를 설정할 때 마지막 부분에  '\'를 빼먹었다는 경고였다.

경고는 보기 싫으니 바로 수정하였다. -0-;;;
반응형
Posted by msparkms
,
반응형

프로젝트에서 간단하게 stats을 표시하려고 하는데 printf 형식을 따라서 표시하기로 정했다.

그에 따라서 stats용으로 printf를 간단하게 구현하기로 했다.

이미 제공되어 있는 것들만 이용하면 쉽게 만들 수 있다.

void  CMSStats::StatsPrintf(DWORD index, TCHAR* fmt, ...)
{
 va_list marker;                                                               -> 가변인자를 처리할 va_list를 생성한다. 
 va_start(marker, fmt);                                                      -> 변환명세를 va_list에 저장한다.
 _vstprintf_s(tempBuffer_, MAX_STATS_BUFFER_SIZE, fmt, marker); -> tempBuffer_에 저장한다.
                                                                                    _s 버전은 두번째 인자에 사이즈를 넣는다.
AddStats(index, tempBuffer_);                                            -> Stats에 추가해준다.
}

반응형
Posted by msparkms
,
반응형

http://www.crydev.net/dm_eds/download_detail.php?id=4

UDK를 따라서 크라이엔진도 공개를 하는듯...

상용만 아니면 무료로 쓸 수 있음.

아직은 엔진을 사용하기 보다는 분석해보고 내 스스로 구현해 봐야 하는 단계이니

집에서 깔아보고 참고해봐야겠다.
반응형
Posted by msparkms
,
반응형
반응형
Posted by msparkms
,
반응형


------------------------------------------------------------------------------------------------------------

http://paulbourke.net/geometry/polygonise/ - Marching Cubes 설명

http://angelcode.com/dev/metaballs/  - Marching Cubes 알고리즘을 이용하여 메타볼을 구현한 예제(DirectX8 버전이지만 9버전으로 금방 고침)

------------------------------------------------------------------------------------------------------------

지속적으로 업데이트 될 예정

------------------------------------------------------------------------------------------------------------

요즘 관심은 Voxel Rendering에 있다.

지형쪽에만 관련되는 내용은 아니지만 Voxel을 기반으로 지형쪽을 렌더링 해보고 싶어서 -0-;;;

Voxel 관련되서 한번 심도 있게 연구해 봐야겠다.

반응형
Posted by msparkms
,