어떤 C ++ GUI 라이브러리를 제안 할 수 있습니까? [닫은]


26

C ++로 자체 게임 엔진을 구축 중이며 현재 사용해야 할 사용자 인터페이스를 결정하고 있습니다.

라이브러리를 사용해야합니까? 내가 직접 만들어야합니까?


3
무슨 의미인지 확실하지 않습니다 : 게임 내 GUI? 아니면 도구를위한 GUI? 각각은 매우 다른 요구 사항입니다 ..
jacmoe

1
ENGINE (에픽 음악)
Ricket

1
모달 대화 상자 만 필요한 경우 sourceforge의 작은 파일 대화 상자는 프로젝트에 추가 할 단일 C C ++ 크로스 플랫폼 파일입니다. init, 메인 루프 없음
tinyfiledialogs

답변:


11

실제로 Qt 위젯은 OpenGL과 통합 될 수 있으며 OpenGL은 Qt (QGLWidget)와 쉽게 통합 될 수 있습니다. 물론, 플랫폼 고유의 위젯은 찾고자하는 것이 아닐 수도 있지만 걱정할 필요는 없습니다. 커스터마이즈하거나, 자신을 만들거나, Qt Quick ( 통합 할 수 있어야합니다).

: 당신이 관심이 있다면, 이러한 링크를 놓치지 마세요 위젯은 세 번째 차원 입력 : WolfenQt를 하고 OpenGL을 사용하여 위젯을 가속화


9

당신이 직접 작성해야한다고 생각하지 않습니다. 게임 엔진을 만드는 작업 자체가 너무 커서, 사용할 수있는 좋은 라이센스를 가진 많은 라이브러리가 있고 원하는대로 수정할 수 있습니다.

게임 엔진의 경우 즉시 모드 GUI를 사용합니다. 자세한 내용은 여기 : http://www.mollyrocket.com/forums/viewtopic.php?t=134

핵심 아이디어는 구성 요소를 그리고 동시에 상호 작용을 제어하는 ​​것입니다.

if (button(id, position, size)) 
{
    button_was_pressed();
}

우선 Unity는 비슷한 개념을 사용합니다.

데모에서 사용되는 NVIDIA의 구현은 http://code.google.com/p/nvidia-widgets/ 에서 찾을 수 있습니다 .


4
IM GUI는 흥미로운 개념이지만 게임을 할 때 나타나는 몇 가지 문제가 있음을 발견했습니다. 메뉴 요소에 애니메이션을 적용하려면 모든 위젯의 개별 위치를 수정하거나 해당 호출에 대한 GUI 변환 매트릭스를 수정하는 등의 작업을 수행해야합니다. 예를 들어, 작업이 하위 항목으로 변환되는 Window 컨테이너가 있으면 더 쉬울 것입니다. 또한 어떤 이유로 든 대부분의 IMGUI 구현에는 "비활성화 된"위젯 상태가 없습니다.
Tetrad

@Tetrad : 자동 레이아웃, 상대 위치 또는 절대 위치로 위젯 그룹을 구현하는 것은 매우 쉽습니다 (Nvidia 위젯이이를 수행합니다). 창이나 패널 내에 위젯을 매우 쉽게 포함 할 수 있습니다. "disabled"상태의 경우 왜 이것이 간단하게 구현되지 않는지 알 수 없습니다. "gamey things"의 경우 위젯이 매 프레임마다 업데이트되므로 직접 모드 개념이 실제로 유지 모드보다 더 적합하다고 생각합니다.
Oskar N.

7

개인적으로 CEGUI를 추천 합니다. 오픈 소스이고 꽤 좋습니다. 그러나 명심해야 할 것은 모든 것을 손으로 쓰면 매우 장황 할 수 있다는 것입니다.

그러나 장점에는 OpenGL과 DirectX 모두에 대한 렌더러가 있습니다. 나는 일반적으로 사용하는 템플릿 위에 VBO를 사용하여 텍스처에 직접 쓰는 템플릿 위에 올려 놓았습니다.

문제의 게임은 네트워킹 과제였습니다. 과제는 로비와 네트워크로 연결된 게임을하는 것이 었습니다. 나는 로비가 목에 통증이 있다는 것을 알고 있었기 때문에 대부분의 도서관을 골랐습니다.


이것이 현재 사용중인 것입니다. 그래도 의존도가 너무 높다는 것을 알았습니다. 그리고 내 프로젝트에 연결하는 데 문제가있었습니다 (IIRC, 라이센스는 라이브러리에만 연결할 수 있다고했습니다)
MrValdez

6
그것은 어리석은 양의 의존성을 가지고 있습니다. 내 작은 데모 게임을 50MB로 부풀렸다!
knight666

뭐? 나는 당신이 잘못하고 있다고 생각합니다 :) 내 게임에서 CEGUI DLL의 무게는 3MB 미만입니다. MrValdez : CEGUI는 BSD 라이센스하에 있습니다.
jacmoe

MIT 라이센스-죄송합니다. CEGUI는 MIT 라이센스하에 있습니다. :)
jacmoe

5

대부분의 GUI 라이브러리 (Qt는 아마도 Windows 전용이 아닌 가장 인기있는 C ++ 라이브러리)의 문제는 대부분 엔진에 잘 통합되지 않는다는 것입니다. 일반적으로 GUI 앱에서 GUI 라이브러리는 기본 루프를 제어하고 콜백을 이벤트에 연결하기 만하면됩니다. 게임 엔진에서는 일반적으로 루프를 제어하고 싶기 때문에 최대한 까다로울 수 있습니다. 어쩌면 그리기 컨트롤과 대화 상자를 처리하고 전달하는 3D 컨텍스트로 처리 할 수있는 것을 찾고 있습니까? 그것들을 찾기가 훨씬 더 어려울 수 있습니다 :-/


<pedantic> wxWidgets는 크로스 플랫폼입니다 </ pedantic>. 엔진 통합에 대한 귀하의
의견을 들으십시오

3
나는 "가장 인기있는"것이 아니라 "유일한"이라고 말했다. -P wx는 내가 본 마지막 3D 컨텍스트 작업에 대한 지원이 훨씬 적다.
coderanger

4

나는 당신 자신의 글을 강력히 믿지만 다시 아주 오래된 사람입니다. 당신이 원하는 한 가지 일을하기 위해 또 다른 GUI 라이브러리와 싸우면 대부분의 게임 GUI가 상당히 사소하다는 사실에 덧붙여 MDI와 super OO 디자인에 대해 모든 것을 다룰 필요가 없다는 사실에 덧붙였습니다. 버튼에는 드래그 가능한 엄지 손가락이있는 확인란 옆의 작업 표시 줄 위로 마우스를 가져 가면 강조 표시되는 스크롤보기가있을 수 있습니다. 내가 생각하는 다른 사람들에 대한 다른 뇌졸중.


"자신의 글을 쓰십시오"라고 생각할 수있는 곳이 많지 않은 상황이 있습니다. 관리 게임이나 복잡한 아이템 관리가있는 RPG와 같이 UI가 중요한 게임. UI는 경험의 큰 부분이 될 것입니다. joelonsoftware.com/articles/fog0000000007.html는 이 핵심 비즈니스 기능이 있다면 - 그것은 자신을, 상관없이 무엇을
v.oddou

3

조사 할 가치가있는 옵션 중 하나는 WebKit을 사용하여 사용자 인터페이스를 렌더링하고 CSS / HTML / Javascript로 모든 UI를 수행하는 것입니다.

여기에 공개 소스 구현 (Berkelium)이 있고 비공개 소스 상업 묵시 (Awesomium)가 있습니다.


5
WebKit과 그 기능은 초당 1 ~ 2 회 재생률에 더 적합하며, 액션 중심 게임을 위해 HUD를 수행하는 것은 까다로울 수 있습니다. 메뉴 나 느린 비트에 좋습니다.
coderanger

1
@coderanger : 전체 게임을 JavaScript / HTML5로 작성할 수 있습니다. WebKit / Chrome에서 60FPS로 실행되는 Chrome 웹 스토어 용 상업용 액션 게임을 게시했습니다.
Sean Middleditch


3

게임 프로젝트에서 개인적으로 CEGUI를 사용하고 있으며 매우 강력한 솔루션입니다. 문제는 때로는 거의 톤을 바꾸는 파일을 조금만 바꾸는 것처럼 느껴진다는 것입니다.

나는 그것을 사용하지 않았지만 libRocket은 모든 라이센스 비용을 없애고 완전히 무료로 전환했습니다. 이 lib의 멋진 부분은 html / css 구문으로 작성한다는 것입니다. http://librocket.com


2

Windows 용 게임을 개발하는 경우 Win32 API를 사용하는 것이 좋습니다. 일반 창 컨트롤을 사용하십시오 (ATL / WTL 라이브러리 사용을 권장합니다).

이 기술이 첫 번째 Unreal Tournament 게임에서 사용되고 공개적으로 공개 된 헤더 (mod 제작자 용)를 살펴 보았습니다.

이 작업의 주요 이점 중 하나는 전체 Windows UI 인프라를 마음대로 사용할 수있을뿐 아니라 키보드 반복 속도, 마우스 감도, 더블 클릭 속도 및 기타 사항에 대한 사용자의 기본 설정을 유지하는 것입니다. 또한 규칙을 준수하면 인터페이스가 빠르고 깜박임이 없습니다.

단점은 여전히 ​​자신의 그래픽과 효과를 적용 할 수 있도록 소유자가 그릴 수 있도록 Windows 컨트롤을 서브 클래스 화하는 코드를 작성해야한다는 것입니다.

그냥 아이디어로 버리십시오.


1
내가는 Win32 / COM은 ... 높은 성능을 위해 권장하지 않음 비스타 및 Windows 7에 에뮬레이트 생각
스티븐 Furlani

게임에서 사용할 GUI의 양에 달려 있다고 생각합니다. 메뉴 시스템만을위한 것이라면 정말로 관심있는 사람이라면 프레임 속도 결정 섹션에서 광범위하게 사용하려면 약간의 작업과 생각이 필요합니다.
Daemin

@StephenFurlani Win32 / COM은 Vista 및 Windows 7에서 에뮬레이션되지 않으며 기본 및 최고 속도입니다. 또한 ATL / WTL은 COM에 의존하지 않지만 DirectX는 COM에 의존합니다.
Daemin April
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.