반응형


BLOG main image




아래 번역한 것은 CEGUI 튜토리얼을 번역한 것입니다

원래 용도는 혼자만 볼것이였습니다, 얼추 번역한다음 소스에 넣었지만 결국엔 유니코드지원이 안되기때문에 빼버리게 된부분입니다만

그냥 지워버리긴 좀 아깝고 혹여나 필요한 분이 있을지도 모른다는 생각에 올려놓습니다

번역은 얼추 번역한것이라 약간 매끄럽진 않을 수도 있습니다

중간 중간 보이는 소스는 개인 프로젝트에 적용하기위해 테스트했던 코드 조각들입니다


번역사이트는 http://www.cegui.org.uk/docs 에서 튜토리얼 부분 입니다






 =================== CEGUI 파일 구성 부분 =================



//@brief CEGUI 를 활용한 GUI 클래스

//@ 아래내용은 http://www.cegui.org.uk/docs 일부 내용을 이해하기 쉽도록 번역한것,  나중에 잊어먹을 경우를 위해서.. [sjh]

//@ 

//CEGUI 는 XML 기반이다

//notice 확장자가 꼭 .xml 이 아니고 의미에 맞는 확장자가 붙는다 ,for example .imageset for an Imageset and .font for a Font 

//또한 이름짖는 규칙은 없다

//1) Imageset : Imageset은 몇몇 소스윤곽에 대해서 지정된 지역들의 모음들이다, 이미지파일 또는 텍스쳐와 같은...

//  imageset 은 scheme의 부분으로서 로드되어지는 한 Imageset을 지정한다

//2) Font : CEGUI 안에서 사용하기위한 폰트를 정의한다, 이것은 두가지 타입이 있다

//  Font는 scheme의 부분으로서 로드되어지는 한 Font를 지정한다

// 1. FreeTypeFont : 표준폰트 .ttf 폰트에 기반되어지는 폰트, 이것은 속성에서 Type="FreeType" 으로 쓰일 수 있고 .font   XML 안에서 사용된다

// 2. PixmapFont : 이 폰트의 타입은  [폰트 glyphs]에대한 이미지들을 정의한 Imageset으로 정의되어진다

// 그리고 비트맵된 폰트로서의 생각되어진 최상이다, .font XML 파일 속성에서  Type="Pixmap" 으로 쓸 수 있다

//3) LookNFeel :  LookNFeel은 CEGUI의 skinning system의 주요한부분으로부터 보관한다

//   WidgetLook과 그 자식에 대한것들을 담고있다

//   LookNFeel은 scheme의 부분으로서 로드되어지는 한 LookNFeel파일을 지정한다

//   

//4) Scheme : Scheme 파일은 다른 데이터 파일들과 리소스들과 함께 그룹화하는 넓은 의미이다 그리고 그것들의

//  상호작용의 몇몇을 정의는 그리고 싱글포인터로부터 CEGUI의 windows와 widgets 를위해서 

//  'skin' 으로 간주되어지는것을 로드하는 의미이다

//  

//5) Layout :  레이아웃파일은 window 레이아웃의 XML표현을 포함한다. 각 집합된 'Window' 속성은 만들어질수있는 

//   window 또는 widget을 정의한다,

//   'Property'요소들은 바랬던 세팅과 각각 정의되어지는 window를 위한 property 값들을 정의한다

//   

//6) Config : CEGUI의 config파일지원은 모든 system default들,  로드되어지는 initial resource들을 지정하는것을 당신에게 허ㅎ ㅓ락한다.

//  뿐만아니라 초기화와 실행하기위한 종료 스크립트파일들(ScriptModule을 사용할때)

// , Renderer와 System오브젝트들을 만들수있는것을 넘어 C++코드의 쓰여지는 라인없이도...

//













 ===================  초기화 부분 ===================



using namespace CEGUI;


//@brief CEGUI 를 활용한 GUI 클래스

//@ 아래내용은 http://www.cegui.org.uk/docs  내용을(전체는 아니지만 중요 부분을 번역한것[SJH], 나중을 위해..



//----------------==========-----------------[ CEGUI의 기본적인 리소스 로딩 sjh]----------------==========-----------------



//CEGUI 의 기본적인 bootstrapSystem() 을 수동으로 만들어주는 구문은 

//http://www.cegui.org.uk/docs/current/rendering_tutorial.html   에서 The Hard Way: Manual object creation. 이하의 구문을

// 따라하면 된다, Call the function to render the GUI 이것 전까지


//리소스 그룹 생성

CEGUI_TRY{

//[ CEGUI 렌더링을 얻기위한 가이드 ] http://www.cegui.org.uk/docs/current/rendering_tutorial.html

//1. 오브젝트로 기반된 CEGUI::Renderer의 인스턴스를 생성한다

//2. CEGUI::System 오브젝트를 생성한다(오브젝트 : 위에서 생성되어진 renderer에서 파싱한것)

//3. 각 프레임,  렌더링을 수행하기위한 CEGUI::System::renderGUI 함수를 호출한다.


// bootstrapSystem 함수는 아래3개를 생성한다, 인자는 CEGUI의 렌더링연산을 위해서 사용되어질 디바이스를 넘긴다

// * 리턴값 : 생성되어졌던  CEGUI::Direct3D9Renderer 오브젝트에 레퍼런스 

//- CEGUI::Direct3D9Renderer

//- CEGUI::DefaultResourceProvider

//- CEGUI::System

//CEGUI 의 기본적인 모든걸 자동적으로 만들어주는 명령문

Direct3D9Renderer& tempRenderer = Direct3D9Renderer::bootstrapSystem( _pD3dDevice );

//initializeManually();





//[ ResourceProviders로 리소스 로딩에 대한 가이드] http://www.cegui.org.uk/docs/current/resprov_tutorial.html

//


// 우리는 당신이 리소스 그룹들과 

// CEGUI와 함께 제공되는 datafiles(C:\sjhPhysics\datafiles\.) 디렉토리안에 data file들을 접근하는 

// 그것들의(리소스 그룹들의) 대상 디렉토리들의 초기화를 수행할 방법, 

// 그리고 우리가 모든 리소스 타입들에 대해 사용되기 위해서 defaultgroups를 할당하는 방법을  보여줄것이다



// 흔히있는 것으로서 핵심 CEGUI::System 오브젝트를 초기화한 후에, 우리는 리소스 그룹들의 한 set과

// 그것들의 타겟 디렉토리들의 한 set을 그때 지정한다.

// ( 타겟 디렉토리들 : 이것은 워킹 디렉토리가 CEGUI 패키지와 함께 'bin' 다렉토리가 될것을  맡는다.)


// DefaultResourceProvider에 대해 필요되는 dirs 를 초기화한다

CEGUI::DefaultResourceProvider* rp = static_cast<CEGUI::DefaultResourceProvider*>

(CEGUI::System::getSingleton().getResourceProvider());

rp->setResourceGroupDirectory("schemes", "../CEGUI/datafiles/schemes/"); //schemes

rp->setResourceGroupDirectory("imagesets", "../CEGUI/datafiles/imagesets/"); //imagesets

rp->setResourceGroupDirectory("fonts", "../CEGUI/datafiles/fonts/"); //font

rp->setResourceGroupDirectory("layouts", "../CEGUI/datafiles/layouts/"); //layouts

rp->setResourceGroupDirectory("looknfeels", "../CEGUI/datafiles/looknfeel/"); //looknfeel

rp->setResourceGroupDirectory("lua_scripts", "../CEGUI/datafiles/lua_scripts/"); //lua_scripts


// 만약 당신이 Xerces를 사용하는 중이고 schemas 위치(locatin)를 지정해야한다면

// 이것은 오직 실제로 필요가 되어진다.

rp->setResourceGroupDirectory("schemas", "../datafiles/xml_schemas/"); //xml_schemas


// 지금 완료되었다, 

// 우리는 그것들(리소스 그룹들)의 대상 디렉토리들 set과 함께 정의되는 리소스 그룹들의 한 멋진 set을 가지고있다.



// 끝으로, 그것들(리소스 그룹들)의 디렉토리들을 사용하는 system을 얻기위해서, 

// 우리는 사용되어지는 default resource groups를 설정한다




//유효성 스키마( validation schemas)를 위한 설치기본그룹 (setup default group)

CEGUI::XMLParser* parser = CEGUI::System::getSingleton().getXMLParser();

if (parser->isPropertyPresent("SchemaDefaultResourceGroup"))

parser->setProperty("SchemaDefaultResourceGroup", "schemas");


// 사용어지는 default resource groups을 설정한다

CEGUI::Scheme::setDefaultResourceGroup("schemes"); //schemes 를 default 그룹으로 설정

CEGUI::Imageset::setDefaultResourceGroup("imagesets"); //imagesets 을 default 그룹으로 설정

CEGUI::Font::setDefaultResourceGroup("fonts"); // fonts 를 default 그룹으로 설정

CEGUI::WindowManager::setDefaultResourceGroup("layouts"); //layouts를 default 그룹으로 설정

CEGUI::WidgetLookManager::setDefaultResourceGroup("looknfeels"); //looknfeels 를 default 그룹으로 설정

CEGUI::ScriptModule::setDefaultResourceGroup("lua_scripts"); //lua_scripts를 default 그룹으로 설정







// 아래 내용을 정리해보면 schema는 어떤 .xsd 파일

// schme는 .xsd 파일안에 있는 내용들의 그룹지어지는 묶음을들을 각각 scheme라고 칭하는 듯



//[ 데이터 파일과 Defaults 초기화에 대한 가이드 ] http://www.cegui.org.uk/docs/current/datafile_tutorial.html

//[소개]

// CEGUI는 다양한 다른 data 파일들을 사용하고

// (적어도 처음에)정확하게 모든 이 파일들이 있는것으로서 몇몇의 혼란과 그것들이 서로 관계되는 방법이 있다.

// 게다가, 당신들이 CEGUI을 사용하는 당신의 다수의 응용프로그램을 위해서 대부분 분명히 

// 설정 할( 설정하기위해서 기술적으로 필요없는 반면에 ) 몇몇의 system 전체 default들이 있다.

// 이 튜토리얼은 당신이 CEGUI와 함께 사용되는 기본 default 옵션들을 설정하는것과 데이터와 함께 더 쉬울 수 있도록

// 명령에 대한 이 주제들에 대한 소개로서 제공될것이다.


//[Font, Imagest, LookNFeel,Scheme, XSD?   그것은 모두 XML 이다]

//

//스크립트 언어 파일들과 로드할수있는 모듈들(.dll/.so files, 등등), 그래픽컬 이미지의 예외와 함께 

// CEGUI를 가지고 사용되어지는 모든 데이터 파일들은 XML기반이다.

// 이것은 당신이 실행 할(.xsd schema 파일들) 첫번째의 가능성있는 방해물로 우리를 실제로 이끈다.

// 

//  스키마 유효성(Schema Validation )

// 비록 Expat 기반 XML 파서 모듈이 XML 데이터 파일들을 파싱하는 것을 위해 지금 default 선택이되었다고 할지라도,

// 이전에 오랬동안 default는 (그리고 여전히 이 저자가 선택을 선호한다) 아파치 소프트웨어 재단(http://xerces.apache.org/xerces-c)

// 으로부터 Xerces-c++ 라이브러리에 대해 기반된 파서이다.

// 이 특별한 파서를 사용하는것의 이점은 그것이 스키마 유효성(schema validation)을 제공하는 것이다.

// 특별한 경험이 없는 사람들을 위해서, 스키마 유효성(schema validation)은 새로온 XML data가 

// 그것이(XML data) 잘 구성되어있고 그것이(XML data) 필요되어지는 정보를 포함한다는것을 보장하기 위해서

// 확인할 수 있는 방법이다.

// 작동하기위한 이 유효성(validation)을 위해서, 몇몇의 추가적인 파일들이 필요되어진다

// 

// ( schema 파일 : schema 파일들로서 알려진 놀랄것도 없이 

//   아래에 설명되어진 CEGUI's 자신의 scheme 파일들에 혼란되지 않기위한 파일들이다 )

//   

// schema 파일들은 XML 입증에 사용된다 왜냐하면 CEGUI는 CEGUI 범위에  datafiles/xml_schema/ 디렉토리안서

// 발견 되어질수 있기때문에, 그리고 .xsd 파일 확장자를 가진다.

//   

// 당신이 현재는 알아야하는 중요한 것은 XML 파서를 기반으로 한 Xerces-C++ 을 사용하는 중일때, 이 .xsd 파일들이

// ResourceProvider system에서 반드시 이용가능하다는 것이다.

// 

// 이것은  schema 파일들을 포함하고있는 디렉토리에서 리소스 그룹들을 세팅하는 것에의해 그리고  

// schema 파일들을 로딩하는 중일때 CEGUI::XercesParser에 의해 사용되는 default 로서 그 그룹을 세팅하는것에

// 대게 가장 잘맞게 달성되어지진다.

// 

// ( schema 파일들 :   The Beginners Guide to resource loading with ResourceProviders

// [http://www.cegui.org.uk/docs/current/resprov_tutorial.html] 이  안에서 

// 이것이(스키마 파일) 다뤄지고있는것을 수행하기위한 세부사항  )



//[데이터 파일]

// 이전에 언급된 것으로서, CEGUI에 대다수의 데이터 파일은 XML기반이다. 

// 일반적 '.xml' 파일 확장자를 사용하는 것 보다, 데이터 파일은 파일들이 실제로 나타내는 것에따라 보통  지정된다

// 예를들어, Imageset을 위한 .imageset과 Font를 위한 .font

// (그렇지만, 이 이름짓는 system의 필요조건은 없다 - 당신은 당신이 좋아하는 어떠한 방법을 이름짓는것은 자유다)

// 목적 각 파일 타입의 매우 간략한 개요를 이제 따른다.

// 

// [Imageset]

// Imageset은 몇몇의 소스외면에 이름지어진 지역들의 모음이다, image파일 또는 texture 와 같은..

// CEGUI 전문용어안에서, 각각의 이 명명된 지역들은 Image 이며 CEGUI에 의해 사용 되어지는 사진의 기본 레벨이다.

// 소스 image파일 또는 텍스쳐 컨텐츠를 수정하는것에 의해서, 또는 Imageset 파일을 가지고 정의되는 지역들의 범위들을

// 수정하는것에 의해서 , 당신은 CEGUI에 의해 그려지는 것의 표현을 쉽게 변화시킨다.

// 

// Imageset 파일들의 완벽한 설명을 위해서, Imageset XML 파일들을 보아라. ( Imageset XML files [http://www.cegui.org.uk/docs/current/xml_imageset.html] )

// 

// [Font]

// 놀랄것도 없이, Font 파일은 CEGUI안에서 사용을위한 폰트를 정의한다.

// 정의되어질 수 있는 폰트는 존재하는 두가지 타입들에 있다  :

// 

// FreeTypeFont) : 이것은 표준 폰트 파일에 기반되어진 폰트이다( true-type '.ttf' font 와 같이 ).

// FreeTypeFont은 .font XML 파일안에서 속성 Type="FreeType"을 통해서 지정된다.

// Imageset 파일들의 완전한 설명을 위해서, Imageset XML files를 보아라

//   (Imageset XML files [http://www.cegui.org.uk/docs/current/xml_imageset.html] )

//

// PixmapFont) : 폰트의 이 타입은 폰트 문자를 위해서 Image들을 정의하는 Imageset에 기반되는 폰트이다,

//  그리고 비트맵된 폰트로서 생각되어지는 최상이다.

//  PixmapFont는 .font XML 파일안에서 속성 Type="Pixamp"을 통해서 지정된다.

// 폰트 파일의 완전한 설명을 위해서, Font XML 파일들을 보아라. 

//   (Font XML files. [http://www.cegui.org.uk/docs/current/xml_font.html] )

// 

// LookNFeel) : LookNFeel은 중요한 대부분의 CEGUI의 skinning system에서 보관한다. 

// 각각은 하나 또는 system 다수 이미지와 자식 widget 구성요소들, 그것들의 위치들, 

// 추가적은 속성 값, 등등에 설명된 더 많은 WidgetLook 정의들을 포함할 것이다.

// 이 WidgetLook 설명은 CEGUI안에 window들과  widget들로서 결국 나타나지는 것으로 system 내부의 요소들을

// 반드시 구체화한다.,


// 폰트 파일들의 완전한 설명을 위해서, Font XML files를 보아라 

// ( Font XML files [http://www.cegui.org.uk/docs/current/xml_font.html] )


// Scheme) :  Scheme 파일은 다른 데이터 파일들과 리소스들과 함께 그룹짓기위한 큰 수단이다.

//         그리고 그것들의 상호작용의 몇몇을 정의하기위해서, 

//         그리고 CEGUI의 window들과 widget들을 위해서 'skin' 으로 간주되어질 것들을 로딩하기위해서 싱글 포인터로부터.

//         Schme는 하나 또는 더 많은 아래것들을 포함할 수 있다.

//         1) Imageset은 scheme의 부분으로서 로드되어지는 Imageset 파일을 지정한다

//         2) Font는 scheme의 부분으로서 로드되어지는 Font 파일을 지정한다

//         3) LookNFeel은 scheme의 부분으로서 로드되어지는 LookNFeel 파일을 지정한다

//         4) WidowSet은 로드할 수있는 모듈의 이름을 지정한다,  widget 이름들의 set은 당신이 system을 등록하려는

//           모듈을(로드할 수있는 모듈의 이름을) 포함한다.

//           ( 비록 어떤 이름들이 열거되지 않더라도, 모듈에서 모든 이용가능한 타입들이 등록되어진다, system 에 )

//           이것은 CEGUI에 추가된 핵심 widget 타입을 더하는것의 편리한 방법이다.

//           ( 특별하게 비록 이 모듈이 타사에의해서 제공되어졌다 할지라도 )

//         5) WindowRendererSet은 로드할 수있는 모듈의 이름을 지정한다, 

//            그리고 window renderer의 set은 당신이 system을 등록하기 바라는 그 모듈(로드할 수있는 모듈의 이름) 내부를 포함한다

//            ( 비록 어떤 이름들이 열거되지 않더라도, 모듈에서 모든 이용가능한 타입들이 등록되어진다, system 에 )

//            'Window Renderer'는 몇몇 기본 window 타입(들)을 위해서 렌더링을 제어할 수있는 오브젝트이다.

//            CEGUI에 의해서 공급되어진 모든 window renderer 오브젝트들은 'Falagard' skinning system의 

//            활용에 의해서 렌더링을 수행한다 (비록 이것이 엄밀한 요구사항이 아닐지라도.. )

//                (Falagard는 웹에서 찾아보니 : CEGUI에서 사용하는 Falagard시스템. 즉 UI커스터마이징을 가능하게 해주는 시스템 

//                          이라 함 , 이 사람이 http://historyis.tistory.com/47 이것에 대한 설명서를 한글화 하여 파일 링크 걸어놓음)

//           6) WindowAlias는 대체 가능한 이름들에 의해서 window/widget 타입에 참조되는 방법을 제공한다.

//               또한 그리고 그것(WindowAlias)은 또 다른 widget 타입을 가지고 이미 등록되어진 Widget 타입을 'hide'  하는데에

//               사용되어질 수있다. ( 그래서 그 다른 widget타입이 대신에 사용되어진다. )

//           7) FalagarMapping은 구체적인 window/widget타입, window renderer타입 그리고 widget look 정의를 링크하는 것에

//               의해서 새로운 사용하기 편리한 window타입을 만든다.

//               

//               scheme파일들의 완벽한 설명을위해서, Scheme XML files를 보아라 [Scheme XML files: http://www.cegui.org.uk/docs/current/xml_scheme.html ]

//

//

// Layout) : layout 파일은 window layout의 XML 설명을 포함한다. 각 끼워넣어진 'Window' 요소는 window 또는 만들어지는 widget을 정의한다,

//               'Property' 요소들은 각 정의되어진 window를 위해서 바랬던 세팅들과 속성 값들을 정의한다.

//     ( layout 파일들의 완벽한 설명을 위해서, Layout XML files을 보아라 [Layout XML files : http://www.cegui.org.uk/docs/current/xml_layout.html ]  )

//  

// Config ) : CEGUI의 config 파일은 모든 system defaults, 로드되어지는 초기 리소스들, 뿐만 아니라 

// Renderer와 System 오브젝트들을 만드는 그것을 넘어 C++코드의 한 줄 쓰는것 없이

// 실행하기( ScriptModule를 사용하는 중일때 ) 위한 초기화와 종료 스크립트 파일들을 지정하는것을 

// 당신에게 ㅎ ㅓ 락한다 

// ( config 파일의 완벽한 설명을 위해서, CEGUI Configuration XML files를 보아라 

//  [CEGUI Configuration XML files : http://www.cegui.org.uk/docs/current/xml_config.html ] )




// [ 기본 파일들을 로딩하는 것 ]

// 

// 것들(일,동작)을 설치하기 위해서 그리고 몇몇 파일들에서 당신이 로드해야만하는 것을 실행하는것.

// 필요되어지는 파일들의 전형적인 set은

// 1) Imageset

// 2) Font

// 3) LookNFeel

// 4) Scheme

// 이다.



//Scheme 파일에 대하여 유용한(당신이 위 설명으로부터 지금까지 쭉 수집되어왔을 것으로 )

// 것은 당신을 위해서 다른 파일들을 자동적으로 로딩할 수 있는것이다.

// 이 튜토리얼의 목적을 위해서, 우리는 scheme 파일들과 font 파일들 로드할 것이다.

// (그것(로드할)은  scheme가 우리를 위해서 Imageset과 LookNFeel을 자동적으로 로드한다는 것을 맡는다 )

// scheme와 font 파일들은 수행되어진다.

// 이와같이 :


// TaharezLook scheme 파일을 생성한다/로드한다

// 이 자동로드 TaharezLook looknfeel와 imageset file들

CEGUI::SchemeManager::getSingleton().create( "TaharezLook.scheme" );

// 폰트를 생성/로드한다

// 로드되어지는 첫번째 폰트는 자동적으로 default 폰트이다, 하지만

// scheme는 이미 로드되어지는 폰트를 가졌을 수있다는것에 주의해야한다,

// 그래서 이미 default set이 존재할것이다,

//  만약 우리가 확실하게 default이기 위해서 "Commonweath-10"폰트를 원한다면, 우리는 명시적으로 나중에

//  default를 설정해야만한다.

//CEGUI::FontManager::getSingleton().create( "DejaVuSans-10.font" );


//위의 코드는(그리고 CEGUI 샘들을안에) 리소스 그릅 위치들과 default 그룹들이 

//[ResourceProviders로 리소스 로딩에 대한 가이드] 에서 설명되어진것으로서 모두 지금까지 쭉

// 설정되어왔다는 것을 가정한다.



//----------------==========-----------------[System defaults 초기화 sjh]----------------==========-----------------

//당신은 System을 위한 몇몇의 default 옵션들을 지정해야한다

//이것은 system은  font와 마우스커서가 이용할수있는 것으로 항상 가지고 있는것을 보증한다

//window 또는widget이 자신의것의 선호가 없음을 지정할때..

//FontManager 는 system default로서  첫번째로 로드되어지는 font 를 자동적으로 세팅한다.

//만약 이것이 당신이 필요로하는 default font가 아니라면, 또는 만약 당신이 이전 font들이 로드되어졌다는것을 보증할수 없다면

// 당신은 명시적으로 default를 지정해야한다, 이 코드로

//System::getSingleton().setDefaultFont( "DejaVuSans-10" );



//또 하나의 당신이 일반적으로 설정 할수있는 오브젝트는 마우스 커서이다

// 이것은 당신이 그것의 커서를 설정하지않은 어떠한 요소의 위로 마우스를 움직일때 마우스커서는 사라지지않는다는것을 보증한다

// 설정하기위한 default 마우스 커서를위한 코드는 아래와 같고

// 이것은 scheme에의해 로드되어지는 TaharezLook imageset을 사용한다

System::getSingleton().setDefaultMouseCursor( "TaharezLook", "MouseArrow" );


//마지막으로, 만약 당신이 툴 팁들을 사용하길 생각한다면

//당신은 당신이 그것의 목적을위해서 사용되는것을 원하는 widget 타입 기반의 ToolTip의 이름을 지정해야한다

// window 단위당 기준에 대해 이것을 설정하는것은 실제로 가능하다

// 비록 이것이 일반적으로 필요되어지지 않고 이 서문의 튜토리얼의 범위를 넘어서는 것일지라도

// default tool tip window 타입을 설정하는 코드는 이것과 같다

System::getSingleton().setDefaultTooltip( "TaharezLook/Tooltip" ); //문서에는 setDefaultToolTip 이라고 되어있지만 T 가 CEGUI::SYSTEM 에서찾아보니 소문자이다

//여기까지가 가장 기본적인 초기화이고 CEGUI 을 초기화하는 최소한의 작업이다








 ===================  =================== ================[ 생성 부분 ]===================  ===================  ===================






using namespace CEGUI;

//CEGUI 창 생성

CEGUI_TRY{


//http://www.cegui.org.uk/docs/current/window_tutorial.html

// The Beginners Guide to Creating a CEGUI Window

//이부분을 더중요한 부분이라 하니 번역해 놓는다.. 역시 나중에 시간이 지나 까먹었을때를 대비해서 [sjh]


// * brief : [모든 widget은 window이다]

// * 이것은 CEGUI로 작동할때 반드시 완전히이해되어져야하는 가장 중심의 개념이다(열라 강조한다...;;)

// * system에있는 모든 widget은 동일한 Window 기반 클래스로부터 상속되어진다.   [ http://www.cegui.org.uk/docs/current/window_tutorial.html 여기의 내용을 중요부분을 번역해놓는다, 다음 문장 번역을 위해 써놓음]

// * 그래서 나는(튜토리얼쓴사람) window를 언급할때는 언제든지, 이 튜토리얼의 목적들을 위해서,

// * 동일한 아이디어들은 push button 또는 스크롤바 widget으로 그냥 쉽게 적용되어질 수있다는 설명을 덧붙인다. (튜토리얼이 비기너 튜토리얼이라 이런 글을 써놓은듯..)

//

// * brief [많은 설정들은 상속되어진다]

// * CEGUI안에서 window들을 위해서 유용한 많은 설정들과 속성들은 window 계층구조아래로 전달되어진다.

// * 예를들어, 그때 default에 의해서, 만약 당신이 0.5로 특정한 window 에 대해 알파 투명도를 설정한다면 모든 window와 widgets은

// * window가 더 높은 값들에서 적용되어진 변화들에의해  또한 영향을받을것으로 붙여진다.

// * 예를들어, 비록 자식 window에대해 실질적으로 설정된것(마지막 값들)을 바뀌지않게 유지하고 그리고/또는 

// * 사용되어진 설정들은 현재 window로 상속된 계층구조안에서 모든 window들로부터 설정되는 값들의 몇몇의 조합들은 

// * 일반적일지라도..

//

//

// * 이것은 window 제거와 같은것들로 또한 적용한다; 예를들어, default에 의해서, window는 붙여진 자식 window들과 widges들을

// * 제거할 것이다 window가 파괴되어질때....

// * 이 방식의 주요 이점은 당신이 알파, visility, enabled/disabled 상태 와같은 것들을 위해서  

// * root window 설정들로 변화들을 만든것에의해 전체 GUI에 쉽게 영향을 줄수있다는 것이다

// *  그리고 root window를 간단하게 파괴하는것에 의해서 전체의 GUI layout을 쉽게 제거할수있다.

// *  

// *  default 상속된 동작들은 제어가 주어진 더 좋은것이 필요로 되어지는 또는

// *  관리 기술들이 향상된 일부가 사용되어지는 window 단위당에 대해 오버라이딩 되어질 수있다.

 


//brief [ window들을 생성한다]

// 동작하게하는 이것(window생성 하는것)의 두가지 방법이 있다, C++ 코드와 XML layout 파일들을 통해서...

// 각 접근은 아래에 논의되어진다

//

// brief [ C++ 코드를 통해 GUI 생성 ]

//  CEGUI에 있는 모든 window들은 WindowManager 싱글톤 오브젝트에 의해 생성되어진다

//  당신은 WindowManager::getSingleton 함수를 통해서 이 오브젝트들로 접근할수 있다.

WindowManager& wmgr = WindowManager::getSingleton();


//대게, 당신은 당신의 GUI 안에 'root' window로서 DefaultWindow(또는 그것의 이전 이름 DefaultGUISheet 을 사용하기위해서 ) 로서 

//알려진 것들을 사용할 것이다

// 이것은 필요하지않다, 하지만 CEGUI를 위해서 사용법의 받아들여지는 패턴이다.

// 그리고 당신이 더 많은 top-level window들을 더하는것을 시작하자마자 그것들(windows)을  배치하는것을 돕는다.

// 

// 본격적으로 시작하기위해서, 

// 그래서 우리는 GUI를 위해서 root 'GUI Sheet'로서 그것(DefaultWindow)을 설정함으로서 DefaultWindow를 생성할 수 있다

Window* myRoot = wmgr.createWindow( "DefaultWindow", "root" );

System::getSingleton().setGUISheet( myRoot ); //setGUISheet 는 Set the active GUI sheet (root) window. 


//WindowManager::createWindow함수는 그것의 파라미터들로서 두개의 스트링들을 취한다

//이 예제안에서 "DefaultWindow" 첫번째 파라미터는 system에게 type 또는당신이 생성하기 바라는

//window의 클래스를 말해준다.

// 일반적으로,  비록 일부일지라 하더라도, 당신이 이용할수있는것을 가지는 window는 

// 당신이 당신의 scheme 파일, DefaultWindow와 같은것을 로드했을때 등록되어지게되는 그것들이(window)

// global 타입들이고 항상 이용가능하다

// 

// 이 예제에서 "root" 두번째 파라미터는 window로 할당되어질 유일한 이름이다

// 이 이름은 나중에 WindowManager로부터 window에대한 포인터를 검색하는 것으로 사용되어질수있다

// 명칭된 당신의 root window "root" 는 필요하지 않지만 일반적인 문법인것을 주의해야한다

// 

// System::setGUISheet함수는 GUI의 root로서 주어진 window를 지정하는 것으로 사용되어진다.

// 이것은 어떤 현재 sheet/root window를 대체할 것이다

// 비록 이전 window계층구조가 실질적으로 소멸되어지지 않는다는것을 주의한다 할지라도(그것은

// 디스플레이로부터 단지 분리되는 것이다  ) 

// 당신은 System::setGUISheet 함수를 하용하는 그것들(window들) 사이에서 간단하게 flipping 에 의해서

// GUI 'pages' 사이에 쉽게 전환할 수있다

// 

// 지금 당신은 당신의 첫번째 윈도우를 지금까지 쭉 만들어왔고 그것을 GUI system으로 붙였다.

// 그리고 system은 그것이 GUI를 그릴때 GUI의 root 로서 이 window를 사용할것이다.

// 하지만 만약 당신이 이 코드를 사용하는 간단한 프로그램을 컴파일을 했다면, 당신은 어떤것도 아직 볼수없다 ;뭣때문이지? <- 내가쓴말 아님 

// 당신의 응용프로그램에 어떤문제는 없다,

// 위에 만들었던 DefaultWindow는 단지 전적으로 눈에 보이지않는다!

// 이것은 root window로서 완벽하게 적합작 DefaultWindow를 만드는 것이다; 그것은 다른 window와 widges들이 붙여질 수 있는

// 빈 도화지로서 제공한다

// 지금 그것들을 해보자...

// 

//여기에 frame window를 만들것이다;

// 이것은 당신의 테스트탑위의 window들에 유사한 방법으로 작동하는 window이다, 이 것은 title bar를 가지며 이동되어질 수있고, 사이즈가조절될 수있다.

FrameWindow* fWnd = static_cast<FrameWindow*>( wmgr.createWindow( "TaharezLook/FrameWindow", "testWindow" ));

//여기서 우리가 "TaharezLook/FramwWindow"  window를 만드는 중이다. 이것의 이름은 system도처에 보여지는 또다른 규칙을 사용한다

// window 타입은 widget set의 이름에 의해서 앞에 붙여진다

// (만약 당신이 WindowsLook scheme를 로드할경우, 당신은 대신에 "WidndowsLook/FramwWindow" 를 생성할수있다 )

// 우리는 우리의 새로운 window에게 "testWindow"의 간단한 테스트 이름을 부여했다

// 기억해야하는 한가지 마지막인것은 캐스트의 사용이다, 이것(캐스트)은 WindowManage::createWindow 함수가 Window 타입을 항상 리턴하기 때문에

// 필요되어진다

// 

// 많은 다른 이 경우에서 기본 window 포인터는 충분할것이다, 

// 하지만 당신이 하위클래스들에 도입된 함수를 접근 하기를 원할 때가있다

// 그래서 보여지게되는것으로서의 캐스트 사용은 CEGUI를 사용하는 중일때 공통이다.

// 우리의 새로운 window로 유용한 어떤것을 할수있는 system을 위해서, 우리는 몇가지 추가적인 단계들을 수행해야한다

// 

// 1) 첫번째,  우리는 위에 설정한 root window로 window를 붙여야한다

myRoot->addChildWindow( fWnd );


//지금 우리는 초기 위치를 설정할수있고 우리의 window를 위한 사이즈를 설정할WindowManager

//CEGUI는 동일한 시간에서 상대적(scale)과 절대적(offset) 구성요소들의 사용을 활성화하는 '통합된' 좌표system을 사용한다

//이것은 당신이 볼것인 각 좌표들이 두 부분을 가지고있는 이유이다.

// 이 개념의 약간 확장되어진 소개를 위해서Falagard skinning system for CEGUI [http://www.cegui.org.uk/docs/current/fal_man.html] 의 부분인

// The Unified Co-ordinate System[http://www.cegui.org.uk/docs/current/fal_intro.html#fal_unifiedsystem]

// 을 보세요. (음......;; 귀차니즘이... )

// 

// 예제로 돌아가서

// 부모의 top-left로부터 거리의 1/4의 위치

fWnd->setPosition( UVector2( UDim( 0.25f, 0 ), UDim( 0.25f, 0 ) ) );


//부모의 절반 사이즈인 크기를 설정한다

fWnd->setSize( UVector2( UDim( 0.5f, 0 ), UDim( 0.5f, 0 ) ) ); //(그럼 1 이 부모의 full 사이즈라는 거네(0.~1.) )


//끝으로, 우리는 framw window의 타이틀바의 설명을 설정한다.

fWnd->setText( "Hello World!" );


//그리고 그것이 전부다!  (ㅋㅋㅋ)

//응용프로그램안에서 컴파일되어질때, 당신이 디스플레이의 중간에 간단한 frame window를 지금 볼것이다.


//[XML layouts]

// 위의 모든것은 아주 훌룡하다, 하지만 하나의 주요한 결점이있다;

// 당신이 GUI layout을 조정하는것을 바라는 어떤 시간에, 당신은 당신의 코드를 수정해야하고 

// 재컴파일을 해야한다. (This will get  old pretty quick), 그래서 당신이 정말로 원하는 것은

// 외부적으로 당신의 GUI layout을 지정할수있는것이다, 그리고 당신의 코드는 파일을 

// 통해 layout을 로드한다.    이것은 CEGUI layout XML 파일들의 목적이다.

// 

// system은 XML layout파일들을 지원한다, 그것은 WindowManager::loadWindowLayout 함수를 통해서 로드되어질수있다.

// 이 함수는 당신을 위한 모든 window들을 만든다 그리고 로드되는 계층구조의 root window에 포인터를 리턴한다

// 그것은 GUI의 root 로서 할당된것으로서 이상적이다!

// 

// 그래서, 모든것의 첫번째로 우리는 layout 파일을 필요로한다, 다음의 XML은 text 파일로서 저장되었다,

// 우리가 위에서 논의했던 코드에  layout 파일에 대응하는 것이다.

// <?xml version="1.0" ?>

// <GUILayout>

// <Window Type="DefaultWindow" Name="root">

// <Window Type="TaharezLook/FrameWindow" Name="testWindow">

// <Property Name="UnifiedPosition" Value="{ {0.25, 0}, {0.25, 0} }" />

// <Property Name="UnifiedSize" Value="{ {0.5, 0}, {0.5, 0} }" />

// <Property Name="Text" Value="Hello World!" />

// </Window>

// </Window>

// </GUILayout>


// Window 요소들은 WindowManager::createWindow 함수들에 확실한 매핑을 보여준다

// -그것들은 이전에 논의되었던 파라미터들에 정확하게 일치하는 타입과 이름을 가진다.

// Window 구성요소들의 내포된것은 다른것으로 어떤 window들을 붙이기위해서 사용되어진다

// 당신이 layout 파일안에서 하나의 'root' level window를 단지 가질것이라는 것에 주의해야한다

// 그것은 당신이 그 밖의 window들과 widget들이 위치되는 캔버스(도화지같은 공간)로서 사용되어지는 

// DefaultWindow를 대게 볼수있는것이 또 하나의 이유이다.


//속성 요소들은 정의되어지는중인 Window에 대한 속성들을 설정하기 위해서 사용되어진다.

// 각 window/widget 클래스를 위해서 이용할수있는 많은 속성들이 있다, 그리고 각 클래스는 

// 그것의(window)의 부모 클래스로부터 모든 속성들이 또한 상속된다.

// 이용가능한 하드코딩된 속성들과 그것들의 value string formats에대한 문서에 대해서 API reference안에

// Properties namespace들을 보시오. 

// 'Falagard' skin들은 그것들 자신의 속성들을 만들 수 있는 때문에, 당신이 사용하는 중인 window들은

// 이전 링크(이 'soft' 속성들에 대한)에서 열거되는 것보다 더 많은 속성들을 포함할 가능성이 있다.

// 당신은 기록문서가 당신이 사용중인 skin과 함게 제공되어지는 어느것이든지 참고해야한다

// 예를들어, CEGUI Wiki를 보시오 : 

// TaharezLook Properties http://www.cegui.org.uk/wiki/index.php/SetProperty

// WindowsLook Properties http://www.cegui.org.uk/wiki/index.php/SetProperty_(WindowsLook)

// 

// 만약 "test.layout" 로 불리는 파일로서 저장했다면, 당신은 이  layout을 로드할 수 있고 다음과 같이 

// GUI root 로서 그것을 설정할 수 있다.

// 


// Window* myRoot = WindowManager::getSingleton().loadWindowLayout( "test.layout" );

// System::getSingleton().setGUISheet( myRoot );


//최종결과는 예상보다 일찍 C++ 코드에서 수행되었던 것으로서 정확하게 동일하다.

// 지금 우리는 수정할 수 있는것을 기대하고 상수편집과 application 코드의 재컴파일에 대해 필요없이

// GUI layout을 향상시킨다.


//[결론]

//여기서 우리는 기본 window 생성을 수행하는 방법, 간단한 window 계층구조를 만드는 방법,

//, 그리고 몇몇의 window 세팅들을 수정하는 방법을 지금까지 쭉 보아왔다

// 당신은 이것이 C++코드와 외부의 XML layout 파일 둘다 사용해서 얻게되어질수있는 방법을 지금까지 쭉 보아왔다

// 양쪽의 방법들을 사용해서 이용가능한 많이 향상된 기능성들이 있다.

// 비록 그런 기능성들은 이 소개의 튜토리얼의 범위를 넘어서 있을지라도



}CEGUI_CATCH(Exception e){


std::cout<<"CEGUI:생성 : "<<e.what()<<std::endl<<std::endl;

return false;

}

return true;

}






 ===================  종료  ===================


종료하면서 해제하는 부분은 따로 번역할 것은 없으며



최근엔


CEGUI::Direct3D9Renderer::destroySystem();

CEGUI::System::destroy(); //모든 실글톤의 객체들을 제거됨



을 하거나 CEGUI 버전에 따라 싱글톤 포인터를 얻어와 해당 포인터를 직접 해제해주거나 해야 하는 방식 입니다







p.s CEGUI나 기타 게임에 관한 공유하실 분 있으면 언제든 환영합니다~






반응형

'그래픽스(Graphics) > GUI Library' 카테고리의 다른 글

CEGUI 설치  (0) 2012.11.02
GUI 제공하는 사이트들  (0) 2012.11.02
반응형

http://hsengine.co.kr/20149811131

 

 

 


 CEGUI 설치와 CEGUI VC++ 설정

 

cegui 설치방법과 cegui 설정하는 방법에 대해 설명하겠다.

CEGUI를 다운받기 위해 CEGUI 사이트에 접속한다.

 

http://www.cegui.org.uk/wiki/index.php/Downloads 

 

 

 

 

Crazy Eddie's GUI System - Downloads 에서 최신버전을 클릭한다.

 

Library Source Downloads에서 운영체제에 맞는 소스코드를 다운받는다.

 

그리고 Binary Dependency Downloads for MSVC++에서 VC++버전에 맞는것을 찾아 다운받는다.

 

 

 

Library Source Downloads에서 다운받는 압축파일을 풀고. (예: C:\CEGUI)

 

Binary Dependency Downloads for MSVC++에서 받은 압축파일을 열어 dependencies 폴더안에 있는 파일들을 아까 압축푼곳에 압축을 풀어 덮어쓴다. 

 

이제 C:\CEGUI\projects\premake 로 이동한다.

 

여기서 오우거엔진이나 일리히트엔진에 이용할꺼면 config.lua 파일을 수정해야된다.

 

config.lua파일에 찾아보면 아래와 같은 내용이 있다.

 

자신에 맞게 직접 수정해주면 된다. (Direct3D9을 이용할꺼면 따로 수정하지 않아도 된다.)

 

그리고 오우거나 일리히트엔진은 따로 경로 설정을 해야된다.

 

 

 

이제  build_vs2008.bat 파일와 build_samples_vs2008.bat을 실행한다. (버전에 맞는걸로 실행)

 

 

 

 

 

그러면 CEGUI.sln, CEGUISamples.sln 파일이 생성된다.

 

열어서 빌드만 해주면 된다.

 

C:\CEGUI\bin 폴더에서 Samples 들을 실행해볼 수 있다.

 

 

VC++ 설정

 

 

 

lib

C:\CEGUI\lib

C:\CEGUI\lib\dynamic

C:\CEGUI\lib\ReleaseWithSymbols

C:\CEGUI\lib\static

 

include

C:\CEGUI\include

C:\CEGUI\cegui\include

C:\CEGUI\cegui\include\elements

C:\CEGUI\cegui\include\falagard

C:\CEGUI\cegui\include\RendererModules\Direct3D9 (여기서 Direct3D9 대신 Irrlicht, Ogre, OpenGL, Direct3D10 등.. 추가할 수 있다. 자신이 사용할것에 따라 설정한다.)

 


directx 는 render 프로젝트에 포함시켜주면된다 CEGUIBase 에도 해놨는데 없어도 되는지는 확인해봐야암

반응형

'그래픽스(Graphics) > GUI Library' 카테고리의 다른 글

cegui 튜토리얼 번역  (0) 2013.02.04
GUI 제공하는 사이트들  (0) 2012.11.02
반응형

출처 : hppt://cafe.naver.com/cafec/248627



직접 구한할려면 보통 일이 아닙니다. 그래서 이미 만들어진 라이브러리를 이용하곤 하죠.
대표적으로 
CEGUI(http://www.cegui.org.uk/wiki/index.php/Main_Page 너무 기능이 많아서 무겁습니다)
librocket(http://librocket.com/ )
guichan(http://guichan.sourceforge.net/ 중국사람이 만든건데 요즘 업데이트 안하는듯)
Scaleform(http://gameware.autodesk.com/scaleform/ flash 이용, 가격이 천만원 초반대ㄷㄷ, 요즘 대부분 온라인게임에 탑제되어서 거의 트렌드입니다.) 
등등,,, 
html, javascript를 이용하는것도 있고, 각양각색입니다. 구글신 검색해보면 많이 나옵니다.

반응형

'그래픽스(Graphics) > GUI Library' 카테고리의 다른 글

cegui 튜토리얼 번역  (0) 2013.02.04
CEGUI 설치  (0) 2012.11.02

+ Recent posts