Gamebryo/Lecture

Gamebryo 셋팅

blueasa 2011. 1. 6. 20:45

*게임브리오 설치 전에 VS 2005를 사용시 반드시 서비스팩1를 설치 

(매니패스트 관련 에러가 난다면 버그로 인해 재배포가 안되어서 에러가 나는 것이므로 꼭 패치해야 한다.)

- 추가 라이브러리

NiMesh.lib NiApplication.lib NiSystem.lib NiMain.lib NiInput.lib NiFloodgate.lib NiDx9Renderer.lib NiAnimation.lib

 

*시작

1. Win32API Project로 생성 3DProject로 설정 (빈프로젝트 생성)

2. 클래스 추가->c++클래스 추가 -> base class에 NiApplication등록-> classname은 CGameApplication

3. #include "NiApplication.h" 추가 // 게임브리오 프레임워크

4. 프로젝트 속성 -> 문자집합을 '유니코드' 설정되어 있는것을-> '설정안함'으로 설정

 

 

5. 프로젝트 속성 -> C/C++ -> 64비트 이식성 문제점 검색 -> '아니오' 설정

 

 

6. C/C++ -> 추가포함 디렉터리 -> 자신이 설치한 include폴더로 지정

7. C/C++ -> 전처리기 -> 전처리기 정의 ->WIN32;_DEBUG;_WINDOWS;NIDEBUG;STRICT 추가 

8. 링커 -> 추가라이브러리 디렉터리 -> 자신이 설치한 debuglib폴더로 지정

9. 링커 -> 입력 -> 추가 종속성 -> 위의 추가라이브러리 설정

   NiMesh.lib (메쉬), NiApplication.lib(프레임워크), NiSystem.lib(게임브리오 전반적 시스템), NiFloodgate.lib(Util),

   NiMain.lib(Base), NiInput.lib(input), NiDx9Render.lib(D3D9)

 

10. 도움말 확인

 

 

 이것을 생성한 class에 추가

11. 게임브리오 라이센스를 선언해 주어야 한다.

 #include <NiLicense.h>
NiEmbedGamebryoLicenseCode;

12. 생성한 NiApplication NiApplication::Create()에

     return NiNew CGameApplication; 으로 추가

     NiApplication* NiApplication::Create()
    {
    /*
     new -> NiNew
     delete -> NiDelete
    */
     return NiNew CGameApplication; 
     }

13. 생성한 클래스의 생성자에게 : NiApplication 생성자 추가후

    CGameApplication::CGameApplication(void)
    : NiApplication("Game ver 0.1", DEF_SCREEN_WIDTH, DEF_SCREEN_HEIGHT)

 

* 잠시! 헤더에 대한 설명

NiApplication.h

: public NiMemObject 가 하고 있다. -> 게임브리오가 질접적으로 메모리를 관리하기 위해 사용되고 있는 것

NiRefObject.h

: 참조를 관리해주는 것으로 이것을 상속받고 있는건 참조에 따라 자동삭제를 하기 위해서임(게임브리오에서 쓰는 스마트포인터 같은..)

NiMeshScreenElements.h

: 2D관련해서 작성할 때 추가

NiMesh.h

: 3D관련

 

*슈핑모드 만들기

1. 구성관리자 -> 새로만들기

 

2. 새 솔루션 구성

 

3. 전행처리기

 

4. lib폴더를 shipping으로 추가

 

5. 헤더는 기본헤더로

 

=> shipping모드는 debug 모드보다 더 가볍다.

 

* 직접 초기화 하기(Dx Device Create)

 

 

직접 초기화 하기 위해 CreateRender() 함수를 상속받아와서 아래 코드를 작성한다.

bool CGameApplication:::CreateRenderer()
{
 unsigned int uiWidth = m_pkAppWindow->GetWidth();
 unsigned int uiHeight = m_pkAppWindow->GetHeight();

 m_spRenderer = NiDX9Renderer::Create(uiWidth, uiHeight,
  NiDX9Renderer::USE_NOFLAGS, GetWindowReference(), 
  GetRenderWindowReference());

 if (m_spRenderer == NULL)
 {
  NiMessageBox("Unable to create a renderer!", "Renderer Failure!");
  QuitApplication();
  return false;
 }
 return true;
}

단, #include <NiDX9Render.h>를 추가해야 한다.

이렇게 하면 앞에서 한 예제와 다르게 다이어로그가 뜨면서 어떤 형식으로 실행할 것인지 물어보지 않는다.

왜냐하면 직접 DX로 한다고 선언했기 때문에..

- 다이어로그 뜰때

 

* 중요한 m_spRendere!

DX 디바이스 가져오기

//--직접적으로DirectX를제어하고싶을때

             NiRenderer* renderer = m_spRenderer;

             NiDX9Renderer* pDX9Renderer  = ((NiDX9Renderer*)renderer);

             LPDIRECT3DDEVICE9 pp =pDX9Renderer->GetD3DDevice();

 

-> 스마트 포인터 때문에 NiRenderer* 포인터로 한번 받아온다.


출처 : http://blog.naver.com/fantaldh/40067964992

[출처] Gamebryo 셋팅|작성자 대봉이

반응형