이런저런 이유로 오늘부터 게임 브리오 엔진 공부를 병행하기로 했습니다. 3개월내로 조작 가능한 프로토타입 하나를 만들 예정입니다. 그런거로 열공!!!

게임브리오 첫 튜토리얼부터 나오는 NiApplication에 대해서 부터 시작!!
튜토리얼 소스를 보면 밑의 소스와 같이 프로그램을 시작합니다.
그리고 이와 함께 NiApplication을 상속 받은 Renderers 클래스에 CreateRenderer() 가상 함수를 재정의 하고 있습니다.

NiApplication* NiApplication::Create()
{
	return NiNew Renderers;
}

동작 방식을 보려면 niappmain.cpp를 봐야합니다.
위의 소스만 봐서는 CreateRenderers() 함수 호출 부위도 없고, 어떻게 창이 뜨는지 조차 알수가 없죠.
밑의 소스는 WinMain() 함수의 일부분입니다.

int WINAPI WinMain(HINSTANCE hI, HINSTANCE, LPSTR cmdline, int iWinMode)
{
    // create the application
    NiApplication* pkTheApp = NiApplication::Create();
    if (!pkTheApp)
    {
        NiMessageBox("Unable to create application", 
            NiAppWindow::GetWindowClassName());
        NiShutdown();    
        return 0;
    }

    // create the application window
    pkTheApp->CreateMainWindow(iWinMode);

    // allow the application to initialize before starting the message pump
    if (pkTheApp->Initialize())
    {
        pkTheApp->MainLoop();
    }

    pkTheApp->Terminate();
}
보시면 NiApplicationCreate() 정적 함수를 호출하고 있습니다. 튜토리얼에서 재정의한 Create() 함수죠.
이 후에 CreateMainWindow(), Initialize()를 차례로 부르고, 메인루프에 진입을 합니다.
그럼 이 Initialize()에서 하는 일을 살펴보자면....
bool NiApplication::Initialize()
{
    // The ShadowManager needs to be initialized before the renderer is
    // created.
    if (m_bUseFrameSystem)
    {
        NiShadowManager::Initialize();
    }

    if (!CreateRenderer())
        return false;

    if (!CreateCamera())
        return false;

    if (!CreateInputSystem())
        return false;

    if (!CreateScene())
    {
        NIMETRICS_APPLICATION_ENDTIMER(kTimer);
        return false;
    }
}
보시면 중간에 CreateRender()가 있습니다. 튜토리얼에서 재정의한 바로 그 함수죠.
이걸로 NiApplication이 어떤식으로 실행되는지 알았으니 이걸 이용해서 뚝딱뚝딱 만들면 될것 같습니다.
  1. BlogIcon 구차니 2010.02.19 16:12 신고

    초기 와우엔진이었다는 그 유명한 게임브리오인가요!!!
    그러고보니, 허스키 익스프레스(넥슨)도 게임 브리오라고 하던데 말이죠

    (근데.. 관심 분야 밖이라서...
    정확하게는 능력밖 ㅠ.ㅠ)

  2. 화유성 2010.03.25 11:11

    아 열공 하시는군요!!
    저도 오늘부터 하려고 하는데 어디서부터 시작을 해야할지 모르겠네요..
    서비스 중인 게임이 게임브리오 임에도 불구하고 할줄 모르는게 너무 좀 거시기해서..
    ㅋㅋ

+ Recent posts