블로그 이미지
Every unexpected event is a path to learning for you.

카테고리

분류 전체보기 (2731)
Unity3D (814)
Programming (474)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (228)
협업 (57)
3DS Max (3)
Game (12)
Utility (136)
Etc (96)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (51)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday
03-28 00:02

Gamebryo 셋팅

Gamebryo/Lecture / 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 셋팅|작성자 대봉이

반응형

'Gamebryo > Lecture' 카테고리의 다른 글

무기잔상효과  (0) 2011.02.08
캐릭터 기울기 연산  (0) 2011.02.08
게임브리오 강좌(?) 링크  (3) 2010.04.14
Gamebryo 2.5  (0) 2010.04.12
[링크] 게임브리오 강좌  (0) 2010.04.10
Posted by blueasa
, |
NiApplication의 멤버변수 NiRendererPtr  m_spRenderer 
는 DX의 디바이스가 생성되면서 할당되어지는 스마트 포인터이다.

하지만 m_spRenderer로 직접 DX제어에 접근할 수는 없다., 즉 디바이스를 얻어올수는 없다.
따라서 다른 수가 필요한데

NiRenderer* pNiRender = m_spRenderer;             // 로 NIRender포인터에 넣어두고
NiDX9Renderer* pDX9Render = (NiDX9Renderer*)pNiRenderer; // 로 형변환 시킨다.

그럼 직접 접근할 수 있다.

pDX9Renderer->GetD3DDevice();  // 로 얻어올수 있다.


반응형

'Gamebryo > Learn' 카테고리의 다른 글

겜브리오의 텍스처 공유  (0) 2011.11.11
충돌 박스 노드에 임시 생성  (0) 2010.07.02
여러창 동시 렌더링  (0) 2010.07.02
Gamebryo 템플릿 클래스  (0) 2010.04.08
렌더러를 만들어보자  (0) 2010.04.08
Posted by blueasa
, |

충돌정보를 넣어줄 노드는 임시로 NiNodePtr spNiNode; 로 한다~

우선은 바운드 박스로 한다!

NiBoxBV* CollisionBox;
CollisionBox = NiNew NiBoxBV();
CollisionBox->SetCenter(NiPoint3(5.0f,5.0f,5.0f));//바운드박스의 중앙을 잡는다.


바운드 박스의 사이즈 설정
CollisionBox->SetExtent(0, 10.0f);
CollisionBox->SetExtent(1, 10.0f);
CollisionBox->SetExtent(2, 10.0f);

 

여기까지 바운드박스 설정을 한후 충돌데이터에 링크 시킨다.
NiCollisionData *pCollisionData;

 

추가 시켜야할 노드의 정보로 충돌 데이터 생성한다.
pCollisionData = NiNew NiCollisionData(spNiNode);
pCollisionData->SetModelSpaceABV(CollisionBox);//위에서 만든 충돌박스 링크!

 

충돌방식에 대해 세팅한다.
pCollisionData->SetPropagationMode(NiCollisionData::PROPAGATE_NAVER);//콜백을 호출하기 위한 정보 세팅
pCollisionData->SetCollisionMode(NiCollisionData::USE_ABV);//ABV형식의 충돌검사를 한다는거?

 

이로서 충돌 데이터는 완성이다 이제 링크다
spNiNode->SetCollisionObject(pCollisionData);

 

이 박스의 와이어 프레임출력하고 싶을 시에는 박스정보를 이용해 색상을 설정하여 노드를 생성한다.
NiNode* CollisionBoundBox = NiDrawableBV::CreateWireframeBV(CollisionBox, NiColor(0.0f,1.0f,0.0f),1);

 

이걸 노드에 Attach!!!!
spNiNode->AttachChild(CollisionBoundBox);

 

이제 완성된 노드를 업데이트 시키면 된다아...
spNiNode->Update(0.0f);
spNiNode->UpdateProperties();
spNiNode->UpdateEffects();

 

이 노드를 CollisionGroup의 Collider이나 Collidee로 추가후

FindCollisions을 호출시 충돌이 일어나면 연결된 함수 포인터로 넘어간다.

 

...다른 좋은방법 아시는분 설명좀...;

출처 : http://tong.nate.com/ddpstddpst/mymaintong

반응형

'Gamebryo > Learn' 카테고리의 다른 글

겜브리오의 텍스처 공유  (0) 2011.11.11
DirectX 디바이스 얻어오기  (0) 2010.11.04
여러창 동시 렌더링  (0) 2010.07.02
Gamebryo 템플릿 클래스  (0) 2010.04.08
렌더러를 만들어보자  (0) 2010.04.08
Posted by blueasa
, |

기본적으로 랜더러는 여러개 생성이 되질 않으므로 하나의 랜더러를 가지고 카메라를 바꿔가며

 

여러창에 랜더링을 해주어야 한다.

 

그것을 위해 제공되는 아주 편리한 메소드가 있더라!

 

CreateSwapChainRenderTargetGroup(0, 윈도우핸들)

 

이것이다.

 

이것을 사용하게 되면 현 윈도우 핸들에 맞춰서 하나의 RenderTargetGroup이 리턴 된다.

 

문제점이 있다면 랜더타켓을 생성만 해주기 때문에 현재 랜더러 해상도에 맞춰서 랜더타켓이 생성이 된다.

 

만약 윈도우 사이즈가 변경이 된다면 랜더러의 해상도를 바꿔주면서 현재 랜더타켓을 삭제하고 다시금 랜더타켓

 

을 생성해야 하는 비효율적인 일을 해야한다.

 

GetSwapChainRenderTargetGroup(윈도우 핸들)

 

위의 메소드는 생성된 랜더타켓을 윈도우핸들을 인자로 받아 그게 맞는 랜더타켓을 리턴받게 된다.

 

이제 실제 랜더를 할때는 생성한 랜더타켓을 이용해

 

BeginUsingRenderTargetGroup(랜더타켓, 초기화)

 

//여기에 랜더링~

 

EndUsingRenderTargetGroup()

 

이후 디스플레이 시켜주면 끝이다.

 

툴에 4방향 랜더링 할때 유용할듯..

출처 : Tong - The_Ruins님의 GameBryo Engine통

반응형

'Gamebryo > Learn' 카테고리의 다른 글

겜브리오의 텍스처 공유  (0) 2011.11.11
DirectX 디바이스 얻어오기  (0) 2010.11.04
충돌 박스 노드에 임시 생성  (0) 2010.07.02
Gamebryo 템플릿 클래스  (0) 2010.04.08
렌더러를 만들어보자  (0) 2010.04.08
Posted by blueasa
, |



1) Attach 후 Detach 제대로 안했을 때 나는 에러..

2) 다른 경우도 있으면 추가해야지..
반응형

'Gamebryo > Bug Report' 카테고리의 다른 글

게임브리오 Do_RenderMesh() Warnning Error  (0) 2011.09.01
Posted by blueasa
, |

NiNew등의 Ni 관련 함수들은

NiInit() 이후에 와야 되는 것 같다.

같은 동적할당이라 생각하고 NiInit() 이전에 했더니 컴파일 에러는 안나는데..

런타임 에러가 난다.

기억해 두자.

반응형
Posted by blueasa
, |
반응형

'Gamebryo > Lecture' 카테고리의 다른 글

캐릭터 기울기 연산  (0) 2011.02.08
Gamebryo 셋팅  (1) 2011.01.06
Gamebryo 2.5  (0) 2010.04.12
[링크] 게임브리오 강좌  (0) 2010.04.10
게임브리오 초기 설정(vs2005)  (0) 2010.04.07
Posted by blueasa
, |
스마트 포인터는 0(or NULL) 값을 대입하면 자동 소멸한다.

그래서 0만 대입하면 되는 줄 알았는데..

0 대입이란게 알아서 delete를 한다는 걸 깜빡했다!

delete 할 때는 순서에 맞게 해줘야 되듯이

스마트 포인터에 0값 대입할 때도 순서에 맞게 해줘야 되더라.. ㅡ.ㅡ

여러 스마트 포인터가 있을 때, 0을 대입하는 순서를 잘 생각하자..
반응형
Posted by blueasa
, |

Gamebryo 2.5

Gamebryo/Lecture / 2010. 4. 12. 14:17
반응형

'Gamebryo > Lecture' 카테고리의 다른 글

Gamebryo 셋팅  (1) 2011.01.06
게임브리오 강좌(?) 링크  (3) 2010.04.14
[링크] 게임브리오 강좌  (0) 2010.04.10
게임브리오 초기 설정(vs2005)  (0) 2010.04.07
Gamebryo  (0) 2010.04.07
Posted by blueasa
, |
반응형

'Gamebryo > Lecture' 카테고리의 다른 글

게임브리오 강좌(?) 링크  (3) 2010.04.14
Gamebryo 2.5  (0) 2010.04.12
게임브리오 초기 설정(vs2005)  (0) 2010.04.07
Gamebryo  (0) 2010.04.07
D3D 좌표계와 게임브리오 좌표계 차이  (0) 2010.04.05
Posted by blueasa
, |