Gute GUI für OpenGL? [geschlossen]


65

Ich beginne OpenGL mit FreeGLUT zu lernen, indem ich das Superbible und das Wissen, das ich aus meinen elementaren Grafiken habe, benutze, um meine Fähigkeiten aufzufrischen.

Um mehr aus dieser Erfahrung herauszuholen, möchte ich eine GUI integrieren, um die von FreeGLUT verwendete zu überschreiben. Nun lautet meine Frage: Ist dies möglich und welche Bibliothek soll ich verwenden?

Einige Eigenschaften für die Bibliothek:

  • Open Source
  • Multiplattform (Linux und Windows)
  • C / C ++

Wenn Sie weitere Empfehlungen haben, können Sie diese gerne zusammen mit Ihren Antworten auf mein Problem posten.


2
OpenGL verwendet standardmäßig eine GUI seit wann? : L
Die kommunistische Ente

Soll heißen, die Bibliothek, die ich benutzt habe, auch bekannt als FreeGLUT.
Cristina,

Bounty hinzugefügt - zusätzliche Voraussetzung: Es müssen plattformübergreifende Dateidialoge vorhanden sein.
Jari Komppa

1
In SourceForge gibt es in winzigen Dateidialogen mehrere modale Funktionsaufrufe. Es ist eine einfache plattformübergreifende C C ++ - Datei, die Sie Ihrem Projekt hinzufügen können.
tinyfiledialogs

Antworten:


33

Ich habe es selbst noch nicht ausprobiert, aber das sieht sehr interessant aus:

Bibliothek

BEARBEITEN: Da Sie einen Kontext zum Rendern benötigen, würde ich entweder SFML oder SDL 1.3 empfehlen.


in der Tat sieht es interessant aus
Will

2
Ich benutze libRocket und es ist absolut wunderbar! Pains von HTML vorhanden ist , auch in der Bibliothek, aber mit etwas fooling mit ihm herum, bekommt man um allem praktisch: D
Grimshaw

Scheint stehen geblieben zu sein (seit ein paar Jahren keine Updates). Außerdem gibt das Durchsuchen der Dokumente keinen wirklich guten Überblick darüber, wie es tatsächlich aussieht. Die Dokumente sind in der Regel viel zu niedrig.
Jari Komppa

Auch kein offizielles Paket für Fedora oder Ubuntu (soweit ich das sehe).
ilent2

Sie können auch GLFW ausprobieren, um einen Renderkontext zu erstellen

19

Die GUI (CEGUI) von Crazy Eddie ist beliebt, und Sie können entweder eines der vorhandenen Renderer-Backends zuschneiden oder Ihr eigenes Targeting schreiben, egal welche OpenGL-gestützte API Sie möchten. Es ist Open Source, plattformübergreifend und C ++. Es wird jedoch auf Konsistenz Wert gelegt, was nicht immer ein gutes UI-Prinzip für Spiele ist, bei denen möglicherweise Dutzende benutzerdefinierter Steuerelemente an genau einer Stelle verwendet werden.

Ein aktuelles beliebtes Muster ist die Sofortmodus-GUI (IMGUI) , eine Art "keine GUI-Bibliothek". Es hat Vor- und Nachteile - es ist sehr einfach, kann aber schwierig zu optimieren sein, und ich habe noch keine wirklich guten IMGUI-Modelle für erweiterte Steuerelemente wie Kombinationsfelder oder Baumansichten gesehen. Ich sehe auch keine gute Implementierung eines IMGUI-Fenstersystems (und ich verbringe einige Zeit damit, eines zu schreiben, mit dem ich nie zufrieden war) - es eignet sich jedoch hervorragend für einfache HUD-Elemente und für einfache einmalige Steuerungen.


2
Ich hatte kürzlich meine ersten Erfahrungen mit IMGUI und fühlte, dass dies ein großer Rückschritt war. Wie Sie sagen, es ist großartig für ein einfaches HUD oder eine statische Symbolleiste, aber ziemlich schrecklich für alles, was dynamisch ist, wenn Künstler oder Designer Layouts erstellen, und Sie dazu zwingt, Präsentation und Logikcode an einem Ort zu mischen.
Kylotan

11
-1. Ich habe das Gefühl, dass CEGUI nur deshalb beliebt ist, weil es existiert und die Leute es als Standard-Goto (wie dieses) erwähnen. Als ich es benutzte, fand ich es umständlich und extrem klobig.
Bobobobo

@bobobobo Einverstanden. Es ist beliebt, weil es existiert. Es ist die "offizielle" GUI für Oger (was auch immer das bedeutet), aber ich finde es ziemlich umständlich, Code zu schreiben. Außerdem ist der RAD-GUI-Builder sehr fehlerhaft (noch in der Entwicklung).
Cheshirekow

1
Lieber Imgui scheint ein gutes Beispiel dafür zu sein, wie vielseitig IMGUIs sein können. Ich muss es noch probieren, aber es scheint ziemlich vielversprechend.
legends2k

13

Ich bin kürzlich über Gwen gestolpert . Es ist eine GUI-Bibliothek, die vom Autor von Gary's Mod geschrieben wurde. Es ist MIT-lizenziert, wie jede gute Spielbibliothek sein sollte.
Gwen-Logo
Die Bibliothek hat mehrere Dinge zu bieten.

  • Großes Widget-Set
    Gwen ist seit einigen Jahren in der Entwicklung und es zeigt.
  • Einfache Anpassung des Backend-Renderers
    Dies ist eine große Sache. Die Bibliothek wird mit einem neu erstellten OpenGL-Renderer geliefert. Das Erstellen eines Renderers ist jedoch so einfach, dass Sie wahrscheinlich einen Renderer speziell für das Rendersystem Ihres Spiels erstellen möchten.
  • Weniger füllend
    Gwen scheint auf der helleren Seite von Spiel-GUIs zu sein. Kein XML, kein HTML-Renderer, nur einfaches C ++. Gwen wird auch nicht mit Image Loadern ausgeliefert. Es wird erwartet, dass das Renderer-Backend das Laden übernimmt. Ich mag diese Funktion, da sie die Bibliothek klein hält und das Render-System meines Spiels bereits Texturen verwaltet.
  • Skinable
    Nicht das Erste in deinen Meilensteinen, aber irgendwann musst du deine Benutzeroberfläche an dein Spiel anpassen.
  • C ++ Skinning
    Ich bin kein Webentwickler und finde die HTML CSS-zentrierten GUIs schwierig.
  • Input Injection
    Dies ist groß für Spiele. Es ist immer ein Problem, GUI-Systeme zu verwenden, die die Eingabe-Abfrage besitzen möchten.
  • Plattformübergreifend
    Die Bibliothek bemüht sich, plattformübergreifend zu sein, gibt jedoch zu, dass auf weniger genutzten Plattformen Probleme auftreten können.
  • aktiv weiterentwickelt
    Außerdem ist es viel kleiner als CEGUI oder MyGUI, daher ist es praktischer, es zu hacken oder Patches einzusenden.

Hier sind jedoch die Nachteile dafür:

  • Es gibt keine einzige Dokumentationsseite. Nicht einmal mehr eine Website, nur das Github-Repo.
  • Da die gepackten Renderer nicht portabel sind, müssen Sie für den Fall, dass Sie sie benötigen, Ihre eigenen schreiben.
  • ???

2
Fehlende Dokumentation, (noch) nicht portierbar, OpenGL-Backend unvollendet usw. Aus Online-Materialien konnte nicht abgeleitet werden, ob es Datei-Io-Dialoge (oder überhaupt Dialoge) gibt.
Jari Komppa

Ich stimme zu, dass die Dokumentation fehlt. Die Kernbibliothek ist plattformübergreifend. Für andere Plattformen fehlen jedoch die Renderer- und Eingabesysteme. Für mich ist das kein Problem, da ich einen Renderer erstellt habe, der auf mein Rendering-System zugeschnitten ist.
deft_code

1
Xaml / html / css nicht zu haben ist kein Plus, das ist sicher. Dafür wurden diese Dinge gemacht und sie machen es viel besser als C ++.
user441521

7

Entschuldigen Sie die verspätete Antwort, aber vielleicht möchten Sie sich ein OpenGL-UI-Framework namens GG ansehen . GG wurde als Teil des FreeOrion- Projekts entwickelt und ist im SVN-Repository (und im herunterladbaren SDK) enthalten. Es scheint ziemlich fähig zu sein. Ich habe unten einen Screenshot eingefügt. Sie können auf das Bild klicken, um die Vollversion anzuzeigen.

Screenshot der GG-basierten Benutzeroberfläche von FreeOrion


Es sieht so aus, als wäre GG auf SourceForge in ein separates Projekt verschoben worden.
deft_code

Würde mich nicht überraschen. Sie haben es absichtlich von FreeOrion abgekoppelt.
Mike Strobel

Ich habe gerade einen ganzen Abend damit verbracht und es braucht wirklich wirklich eine CMake-Datei. Ich mag das Aussehen und das Gefühl, ich mag nicht, dass es Boost verwendet.
Ritter666

GG kann hier gefunden werden: gigi.sourceforge.net
MichaelHouse

Viel Glück, dass das unter Fenstern gebaut wird.
3Dave


4

Schauen Sie sich AntTweakBar an , es wird von Cinder verwendet . Es ist auch eine neue GUI-Bibliothek für Cinder in Arbeit: SimpleGUI .

Wenn Sie auf HTML + CSS umsteigen möchten, gibt es Awesomium (das von Wolfire Games in ihrem Overgrowth-Spiel verwendet wird ) und eine kostenlose Alternative namens Berkelium .


AntTweakBar ist großartig, aber eher begrenzt. Es ist großartig für das, wofür es entwickelt wurde - das Optimieren von Werten und die extrem einfache Integration -, aber nicht nützlich als generisches UI-Toolkit.
Jari Komppa

3

Ich habe sowohl mit QuickGUI als auch mit MyGUI gespielt . Sie sind beide Ogre-GUI-Bibliotheken, die in letzter Zeit die Ogre-Anforderungen nicht mehr erfüllen. Ich habe noch nicht allzu viel Erfahrung damit, aber es sieht so aus, als würde ich bei QuickGUI bleiben, da es viel kleiner und einfacher ist.

Ich bin mir nicht sicher, ob das QuickGUI-Wiki noch aktualisiert wurde, um auf die neueste Ogre-freie Version zu verweisen. Hier ist die neueste Version.

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

Dort hat repo ein paar plattformübergreifende Aktualisierungen erhalten, sodass Sie den svn besser direkt verwenden können.

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

Benutzername: Anonymes
Passwort: QuickGUI

Abschließend finden Sie hier das kurze Wiki zum Hinzufügen verschiedener Rendering-Backends. http://www.ogre3d.org/tikiwiki/QuickGUI+Integration+Tutorial

MyGUI scheint mehr Funktionen zu haben, was zu einer Aufblähung führen kann. Und ehrlich gesagt, wenn Einfachheit keine Voraussetzung ist, bläst CEGUI MyGUI aus dem Wasser.


Ich habe MyGUI ausprobiert und es ist in der Tat extrem aufgebläht. Ich kann es nicht wirklich empfehlen, wenn Sie Platz sparen möchten. Immer noch fummeln, um QuickGUI zum Laufen zu bringen.
Cristina

1
Ich habe beide ausprobiert und CEGUI die längste Zeit benutzt, aber es war absolut schrecklich, nicht zu vergessen, dass es mit viel Text extrem langsam ist. Ich habe kürzlich zu MyGUI gewechselt und es hat gut funktioniert. Ihr Layout und die Skin-Editoren sind sehr, sehr ordentlich. Ich bin mir nicht sicher, was das Aufblähen angeht. Ich denke, CEGUI ist im Vergleich stark aufgebläht. Einige der Vorgehensweisen in MyGUI sind seltsam (zum Beispiel + = Operator zum Zuweisen von Delegierten, und das Casting wird auch seltsam durchgeführt - die Autoren entwickeln es aktiv und hören sich großartige Vorschläge an), aber insgesamt bevorzuge ich es CEGUI.
Samaursa

@Samaursa + = Operator bedeutet, dass Sie mehr als einen Delegaten hinzufügen können.
Ocelot

3

Ich würde QT empfehlen, da es sich um plattformübergreifendes C ++ handelt und Sie eine Open Source-Version davon mit der LGPL-Lizenz erhalten können. Es ist auch einfach zu bedienen und verfügt über viele vorgefertigte Komponenten, die Sie verwenden können.


6
Denken Sie nicht, dass dies eine OpenGL-basierte Benutzeroberfläche ist.
DeadMG

Es heißt nicht, dass es OpenGL-basiert sein sollte, oder verstehe ich die Frage völlig falsch? Ich habe es gelesen, da er nichts für freeGLUT übernehmen will, wozu QT mehr als fähig ist.
18.02.11

Ich würde das unterstützen! Ich benutze qt und es hat fast alles, was man braucht, wenn sie anfangen. Im Laufe der Jahre ist es sehr stabil geworden, mit einer guten Unterstützung. Sie haben auch einen Rahmen für Spiele namens Gluon.
Brainydexter

8
Das Problem mit QT und Frameworks im Allgemeinen ist, dass sie die Hauptschleife steuern. Das ist in der Regel nicht gut Spiele leihen.
deft_code

1
Wenn die Benutzeroberfläche nicht OpenGL ist, empfehle ich, die Hauptschleife zu entfernen und die ereignisbasierte Benutzeroberfläche sowie Ereignisse und Timer für das Spiel und die Grafiken zu verwenden. Wie auch immer, ich habe QT verwendet und ich kann es nicht empfehlen.
Danny Varod

3

Die Entwickler haben mich vielleicht erschossen , weil ich das gesagt habe, aber ich fand, dass GLFW einfach großartig darin ist, plattformübergreifende GUI-Frameworks zu erstellen. Die GLFW-Entwickler machen weiter und weiter, dass GLFW nicht mit GUI umgeht . Es erledigt jedoch eine nette, einfache, saubere und vollständig tragbare Aufgabe, Grafiken, Ereignisse und Maus- / Tastatur- / Joystick-Aufgaben zu verarbeiten.

Das Schöne an GLFW ist für mich, dass es ziemlich klein ist, keinen systemspezifischen Code, kein GLUT erfordert und gut gepflegt ist. War bisher für die Verwendung in OpenGL 4.1-Projekten stabil. Im Vergleich zu etwas wie SDL mag ich den winzigen Overhead und es war kinderleicht, GUI-Handler-Klassen zu schreiben.

Alternativ können Sie sich FLTK ansehen . Es kann für alle möglichen Zwecke verwendet und sehr einfach umgestaltet werden. Es wird wirklich zum Erstellen von Anwendungen verwendet, ist jedoch perfekt in der Lage, 3D-Objekte zu verarbeiten und basiert auf OpenGL. Sehr klein, gut unterstützt und obwohl ich nicht viele Leute sehe, die benutzerdefinierte Interfaces auf der Game-Design-Ebene erstellen, gibt es einige, die großartig zu funktionieren scheinen.


1
Ist glfw nicht nur eine Bibliothek zur Abstraktion von Fenstercode auf Desktop-Plattformen? Wie können Sie damit Grafiken erstellen?

1
@ GabrieleVierti gut, wie ich sagte, es verarbeitet auch plattformübergreifend beschleunigte Eingaben. Darüber hinaus hilft es Ihnen insbesondere dabei, einen OpenGL- oder Vulkan-Kontext mit Barebones zu erstellen und einen Großteil der Boilerplate zu verarbeiten. Im Kontext implementiere ich einfach eine Histogrammpyramide der Hotspots über dem Bildschirm und verwende diese als Hauptbestandteil des Click / Type-Event-Handlers. Anschließend werden die Steuerelemente mit einer bestimmten Stelle in der Pyramide verknüpft. normale Zeichenbefehle zum Einstellen der eigentlichen Grafik.
Jedes

Es wäre viel einfacher, einfach ein vorgefertigtes GUI-Framework (wie z. B. ImGui)

1
ImGui wird im Sofortmodus ausgeführt, sodass Sie die Hardwarebeschleunigung verlieren. Die Dinge, die ich erwähnte, mussten ohnehin für das Rendering des Spiels verfolgt werden, sodass das Hinzufügen von 2D-Overlays keine große Rolle spielte. Ich kann sehen, dass das für einige Projekte ein Ärger wäre
Garet Claborn
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.