Dobry GUI dla OpenGL? [Zamknięte]


65

Zaczynam się uczyć OpenGL z FreeGLUT przy użyciu Superbible i wiedzy, którą posiadam z podstawowej grafiki, aby odświeżyć swoje umiejętności.

Aby uzyskać więcej z tego doświadczenia, chcę zintegrować GUI w celu zastąpienia tego, którego używa FreeGLUT, teraz moje pytanie brzmi: czy to jest możliwe i jakiej biblioteki powinienem użyć?

Niektóre cechy biblioteki:

  • Otwarte źródło
  • Wieloplatformowy (Linux i Windows)
  • C / C ++

Jeśli masz jakieś inne rekomendacje, możesz je opublikować wraz z odpowiedziami na mój problem.


2
OpenGL domyślnie korzysta z GUI, od kiedy? : L
Kaczka komunistyczna

Mam na myśli bibliotekę, której używałem, czyli FreeGLUT.
Cristina,

Dodano nagrodę - dodatkowe wymaganie: musi mieć międzyplatformowe okna dialogowe z plikami io.
Jari Komppa,

1
w sourceforge, małe okna dialogowe plików mają kilka modalnych wywołań funkcji. jest to prosty wieloplatformowy plik C C ++, który można dodać do projektu.
tinyfiledialogs

Odpowiedzi:


33

Sam jeszcze tego nie próbowałem, ale wygląda to bardzo interesująco:

biblioteka

EDYCJA: Ponieważ potrzebujesz do renderowania kontekstu, polecam SFML lub SDL 1.3.


rzeczywiście wygląda interesująco
będzie

2
Używam libRocket i jest absolutnie cudowny! Bóle HTML są również obecne w bibliotece, ale przy odrobinie wygłupów, można obejść wszystko praktycznie: D
Grimshaw

Wygląda na to, że utknął w miejscu (brak aktualizacji przez kilka lat). Ponadto przeglądanie dokumentów nie daje naprawdę dobrego obrazu tego, jak to naprawdę jest. Dokumenty są ogólnie o wiele za niskie.
Jari Komppa

Brak oficjalnego pakietu dla Fedory lub Ubuntu (o ile widzę).
ilent2

Możesz także wypróbować GLFW, aby utworzyć kontekst renderowania

19

Interfejs użytkownika Crazy Eddie's GUI (CEGUI) jest popularny i możesz albo szopować jeden z istniejących backendów renderera, albo napisać swój własny cel na dowolnym API wspieranym przez OpenGL. Jest to oprogramowanie typu open source, wieloplatformowe i C ++. Jednak ceni sobie spójność, co nie zawsze jest dobrą zasadą interfejsu użytkownika w grach, w których dziesiątki niestandardowych elementów sterujących można stosować w jednym miejscu.

Najnowszym popularnym wzorcem jest GUI trybu natychmiastowego (IMGUI) , które jest rodzajem „bez biblioteki GUI”. Ma plusy i minusy - jest bardzo prosty, ale może być trudny do optymalizacji, a ja jeszcze nie widziałem naprawdę dobrych modeli IMGUI dla zaawansowanych elementów sterujących, takich jak pola kombi lub widoki drzewa. Nie widzę też dobrej implementacji systemu okienkowania IMGUI (i spędzam trochę czasu próbując napisać taki, z którego nigdy nie byłem zadowolony) - jest jednak doskonały do ​​prostych elementów HUD i łatwych do jednorazowego sterowania.


2
Niedawno miałem pierwsze doświadczenie z IMGUI i czułem, że był to duży krok wstecz. Jak mówisz, jest świetny dla prostego interfejsu lub statycznego paska narzędzi, ale dość okropny dla wszystkiego dynamicznego, wrogiego wobec tworzenia przez artystów lub projektantów układów i zmusza cię do łączenia prezentacji i kodu logicznego w jednym miejscu.
Kylotan

11
-1. Mam wrażenie, że CEGUI jest popularny tylko dlatego, że istnieje i ludzie wspominają o nim jako domyślnym goto (tak jak to). Kiedy go użyłem, okazało się, że jest niezręczny i niezgrabny.
bobobobo

@bobobobo Zgoda. Jest popularny, ponieważ istnieje. To „oficjalne” gui dla ogrów (cokolwiek to znaczy), ale kodowanie jest dla mnie dość kłopotliwe. Ponadto konstruktor GUi RAD jest zdecydowanie błędny (wciąż w fazie rozwoju).
cheshirekow

1
drogi imgui wydaje się dobrym przykładem wszechstronności IMGUI. Jeszcze go wypróbowałem, ale wydaje się dość obiecujący.
legends2k,

13

Niedawno natknąłem się na Gwen . To biblioteka GUI napisana przez autora Gary's Mod. Ma licencję MIT, jak każda dobra biblioteka gier.
Logo Gwen
Biblioteka ma kilka rzeczy.

  • Duży zestaw widżetów
    Gwen jest rozwijany od kilku lat i to pokazuje.
  • Łatwa personalizacja renderera backendu
    To jest duże. Biblioteka jest wyposażona w przebudowany renderer OpenGL. Ale tworzenie renderera jest na tyle proste, że prawdopodobnie będziesz chciał zbudować renderer specyficzny dla systemu renderowania twojej gry.
  • Mniej zapełniające się
    Gwen wydaje się być po lżejszej stronie GUI gry. Bez XML, bez renderera HTML, po prostu prosty C ++. Gwen również nie jest dostarczana z modułami ładującymi obraz. Oczekuje, że backend renderera poradzi sobie z ładowaniem. Podoba mi się ta funkcja, ponieważ sprawia, że ​​biblioteka jest mała, a system renderowania mojej gry już zarządza teksturami.
  • Skinable
    Nie jest to pierwsza rzecz w kamieniach milowych, ale w końcu będziesz musiał dostosować GUI do swojej gry.
  • C ++ skinning
    Nie jestem programistą i trudno mi się znaleźć w html css-centrycznych GUI.
  • Iniekcja wejściowa
    Jest to duże w przypadku gier. Korzystanie z systemów GUI, które chcą mieć sondowanie wejściowe, zawsze stanowi problem.
  • wieloplatformowa
    Biblioteka stara się być wieloplatformowa, ale przyznają, że możesz napotkać problemy na mniej używanych platformach.
  • aktywnie rozwijany
    Co więcej, jest znacznie mniejszy niż CEGUI lub MyGUI, więc hakowanie go lub przesyłanie poprawek jest o wiele bardziej praktyczne.

Oto jednak wady:

  • Nie ma jednej strony dokumentacji. Nie ma już nawet strony internetowej, tylko repozytorium github.
  • Zapakowane renderery nie są przenośne, więc musisz napisać własne na wypadek, gdyby były potrzebne.
  • ???

2
Brakuje dokumentacji, nieprzenośnej (jeszcze), niedokończonego zaplecza OpenGL itp. Nie można stwierdzić na podstawie materiałów online, czy ma okna dialogowe pliku (lub w ogóle okna dialogowe).
Jari Komppa

Zgadzam się, że brakuje dokumentacji. Podstawowa biblioteka jest wieloplatformowa. Brakuje jednak mechanizmu renderującego i wejściowego dla innych platform. Dla mnie to nie problem, ponieważ zbudowałem renderer dostosowany do mnie systemu renderowania.
deft_code

1
Nie posiadanie xaml / html / css nie jest na pewno plusem. Do tego właśnie te rzeczy zostały stworzone i robią to znacznie lepiej niż potrafi C ++.
user441521

7

Przepraszamy za późną odpowiedź, ale możesz rzucić okiem na strukturę interfejsu OpenGL o nazwie GG . GG został opracowany w ramach projektu FreeOrion i jest zawarty w repozytorium SVN (oraz w pakiecie SDK do pobrania). Wydaje się całkiem zdolny. Poniżej zamieściłem zrzut ekranu; możesz kliknąć obraz, aby wyświetlić pełną wersję.

Zrzut ekranu interfejsu użytkownika opartego na GG FreeOrion


Wygląda na to, że GG został przeniesiony do oddzielnego projektu gigi na sourceforge.
deft_code

Nie zaskoczyłby mnie. Celowo trzymali go w oddzieleniu od FreeOrion.
Mike Strobel,

Właśnie spędziłem nad tym cały wieczór i naprawdę potrzebuje pliku CMake. Podoba mi się wygląd i styl, nie podoba mi się, że używa wzmocnienia.
knight666

GG można znaleźć tutaj: gigi.sourceforge.net
MichaelHouse

Powodzenia w budowaniu pod oknami.
3Dave


4

Spójrz na AntTweakBar , jest używany przez Cinder . Istnieje także nowa biblioteka GUI dla Cinder w pracach: SimpleGUI .

Jeśli chcesz korzystać z HTML + CSS, znajdziesz Awesomium (używane przez Wolfire Games w ich grze Overgrowth ) oraz darmową alternatywę o nazwie Berkelium .


AntTweakBar jest niesamowity, ale raczej ograniczony. Jest świetny do tego, do czego został zaprojektowany - poprawiania wartości i niezwykle prostej integracji - ale nie jest przydatny jako ogólny zestaw narzędzi interfejsu użytkownika.
Jari Komppa

3

Bawiłem się zarówno QuickGUI, jak i MyGUI . Obie są bibliotekami GUI Ogre, które ostatnio porzuciły wymóg ogra. Nie mam jeszcze zbyt dużego doświadczenia z nimi, ale wygląda na to, że będę trzymać się QuickGUI, ponieważ jest on znacznie mniejszy i prostszy.

Nie jestem pewien, czy wiki QuickGUI została zaktualizowana, aby wskazywała na najnowszą wersję bez Ogre. Oto najnowsza wersja.

http://www.stormsonggames.com/downloads/QuickGUI_10_8.zip

W repozytorium pojawiło się kilka aktualizacji międzyplatformowych, więc lepiej będzie korzystać z svn bezpośrednio.

http://stormsonggames.com/svn/SSE/Gaia2/QuickGUI
http://stormsonggames.com/svn/SSE/Gaia2/QuickGUIOgreDemo
http://stormsonggames.com/svn/SSE/Gaia2/QuickGUIOgrePlatform

Nazwa użytkownika: Anonimowe
hasło: QuickGUI

Na koniec znajduje się krótka wiki na temat dodawania różnych backendów renderujących. http://www.ogre3d.org/tikiwiki/QuickGUI+Integration+Tutorial

MyGUI wydaje się mieć więcej funkcji kosztem rozdęcia. I szczerze mówiąc, jeśli prostota nie jest wymogiem, CEGUI wydmuchuje MyGUI z wody.


Wypróbowałem MyGUI i jest on naprawdę nadęty, nie polecam go, jeśli chcesz zaoszczędzić miejsce. Wciąż mam problemy z uruchomieniem QuickGUI.
Cristina

1
Próbowałem obu, używałem CEGUI przez najdłuższy czas, ale było to absolutnie przerażające, nie wspominając o bardzo powolnym z dużą ilością tekstu. Niedawno przeszedłem na MyGUI i działa dobrze. Ich układ i edytory skór są bardzo porządne. Nie jestem pewien co do wzdęcia, myślę, że CEGUI jest bardzo rozdęty w porównaniu. Niektóre praktyki w MyGUI są dziwne (na przykład + = operator do przypisywania delegatów, a casting odbywa się również w dziwny sposób - autorzy aktywnie go rozwijają i słuchają sugestii, które są świetne), ale ogólnie wolę to niż CEGUI.
Samaursa,

@Samaursa + = operator oznacza, że ​​możesz dodać więcej niż jednego delegata.
Ocelot,

3

Polecam QT, ponieważ jest to platforma wieloplatformowa, C ++, a możesz uzyskać wersję Open Source z licencją LGPL. Jest również łatwy w użyciu i ma wiele gotowych komponentów, z których można korzystać.


6
Nie sądzę, że jest to interfejs użytkownika oparty na OpenGL.
DeadMG

Nie mówi, że powinien być oparty na OpenGL, czy też całkowicie nie rozumiem pytania? Przeczytałem to, ponieważ nie ma on nic do przejęcia za freeGLUT, do czego QT jest więcej niż zdolny.
martiert

Poparłbym to! Używam qt i ma prawie wszystko, czego potrzebujesz, kiedy zaczynają. Z biegiem lat stał się bardzo stabilny, z dobrym wsparciem. Mają także ramy dla gier o nazwie gluon.
brainydexter

8
Problem z QT i frameworkami jest taki, że kontrolują one główną pętlę. To zwykle nie nadaje się do gier.
deft_code

1
Jeśli interfejs użytkownika nie jest OpenGL, polecam pozbyć się głównej pętli, używając interfejsu opartego na zdarzeniach oraz zdarzeń i timerów dla gry + grafiki. W każdym razie użyłem QT i nie polecam tego.
Danny Varod,

3

Twórcy mogą zastrzelić mnie za to, ale powiedziałem, że GLFW jest po prostu niesamowity w tworzeniu międzyplatformowych platform graficznych. Ludzie zajmujący się programowaniem GLFW ciągle mówią o GLFW nie obsługuje GUI. To ma jednak zrobić ładne, proste, czyste i całkowicie przenośny pracy obsługi grafiki, zdarzeń i zadań mysz / klawiatura / joystick.

Zaletą GLFW jest dla mnie to, że jest dość mały, nie wymaga kodu specyficznego dla systemu, nie ma GLUT i jest dobrze utrzymany. Dotychczas był stabilny do użytku w projektach OpenGL 4.1. W porównaniu z czymś takim jak SDL uwielbiam ten drobny narzut i pisanie klas programów obsługi GUI było dziecinnie proste.

Alternatywnie, spójrz na FLTK . Można go używać do wszelkiego rodzaju rzeczy i bardzo prosto modyfikować. Jest używany do budowania aplikacji, ale doskonale obsługuje obiekty 3D i jest oparty na OpenGL. Bardzo mały, dobrze obsługiwany i chociaż nie widzę wielu osób tworzących niestandardowe interfejsy na poziomie projektowania gry, niektóre z nich wydają się działać świetnie.


1
Czy glfw nie jest tylko biblioteką do usuwania kodu okienkowego na platformach komputerowych? Jak możesz za jego pomocą tworzyć grafiki?

1
@GabrieleVierti, tak jak powiedziałem, obsługuje również przyspieszanie między platformami. poza tym bardziej konkretnie pomaga uzyskać szkielet OpenGL lub Vulkan i bez problemu radzi sobie z dużą ilością płyt kotłowych. W kontekście zaimplementowałem po prostu na ekranie piramidę histogramu punktów aktywnych i używam jej jako głównej części modułu obsługi zdarzeń typu kliknięcie / typ. następnie kontrole przypisują się do jakiegoś miejsca na piramidzie. normalne polecenia rysowania do ustawiania rzeczywistej grafiki. dowolny zestaw interfejsu użytkownika do treści internetowych działa dobrze lub więcej grafik specyficznych dla domeny
Garet Claborn,

O wiele łatwiej byłoby po prostu dodać gotową platformę GUI (jak drogi ImGui)

1
ImGui działa w trybie natychmiastowym, więc stracisz przyspieszenie sprzętowe. rzeczy, o których wspomniałem, i tak musiałem śledzić renderowanie gry, więc dodanie niektórych nakładek 2D nie było istotnym czynnikiem. Widzę jednak, że byłoby to kłopotliwe dla niektórych projektów
Garet Claborn,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.