반응형

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
,