Buona interfaccia grafica per OpenGL? [chiuso]


65

Sto iniziando a imparare OpenGL con FreeGLUT usando Superbible e le conoscenze che ho dalla mia grafica elementare per rispolverare le mie capacità.

Per ottenere di più da questa esperienza, voglio integrare una GUI per sovrascrivere quella che FreeGLUT usa, ora la mia domanda è questa: è possibile e quale libreria dovrei usare?

Alcune caratteristiche per la biblioteca:

  • Open source
  • Multipiattaforma (Linux e Windows)
  • C / C ++

Se hai altri consigli, sentiti libero di pubblicarli insieme alle tue risposte per il mio problema.


2
OpenGL utilizza una GUI di default da quando? : L
L'anatra comunista

Volevo dire la libreria che stavo usando, aka FreeGLUT.
Cristina,

Bounty aggiunto - requisito aggiuntivo: deve avere finestre di dialogo file io multipiattaforma.
Jari Komppa,

1
su sourceforge, le piccole finestre di dialogo dei file hanno diverse chiamate di funzioni modali. è un semplice file multipiattaforma C C ++ da aggiungere al tuo progetto.
tinyfiledialogs,

Risposte:


33

Non l'ho ancora provato da solo, ma questo sembra molto interessante:

librocket

EDIT: Dal momento che avrai bisogno di un contesto per il rendering, consiglierei SFML o SDL 1.3.


anzi sembra interessante
Will

2
Uso libRocket ed è assolutamente meraviglioso! Nella libreria sono presenti anche frammenti di HTML, ma con alcuni scherzi, puoi aggirare praticamente qualsiasi cosa: D
Grimshaw,

Sembra essersi bloccato (nessun aggiornamento per un paio d'anni). Inoltre, sfogliare i documenti non offre una buona visione di come sia realmente. I documenti sono generalmente di livello troppo basso.
Jari Komppa,

Neanche un pacchetto ufficiale per Fedora o Ubuntu (per quanto posso vedere).
ilent2,

Puoi anche provare GLFW per creare un contesto di rendering

19

La GUI di Crazy Eddie (CEGUI) è popolare e puoi culla uno dei backend di renderer esistenti o scrivere il tuo targeting qualunque API supportata da OpenGL che desideri. È open source, multipiattaforma e C ++. Tuttavia, valorizza la coerenza, che non è sempre un buon principio dell'interfaccia utente per i giochi, che può avere dozzine di controlli personalizzati utilizzati esattamente in un unico posto.

Un modello popolare recente è la GUI in modalità immediata (IMGUI) , che è una specie di "nessuna libreria GUI". Ha vantaggi e svantaggi: è molto semplice, ma può essere difficile da ottimizzare, e devo ancora vedere modelli IMGUI davvero buoni per controlli avanzati come caselle combinate o viste ad albero. Né ho visto una buona implementazione di un sistema di finestre IMGUI (e passo un po 'di tempo a provare a scriverne uno, di cui non sono mai stato contento) - è comunque eccellente per semplici elementi HUD e semplici controlli una tantum.


2
Di recente ho avuto la mia prima esperienza con IMGUI e ho pensato che fosse un grande passo indietro. Come dici tu, è ottimo per un semplice HUD o una barra degli strumenti statica, ma piuttosto terribile per qualsiasi cosa dinamica, ostile al fatto che artisti o designer creino layout e ti costringe a mescolare presentazione e codice logico insieme in un unico posto.
Kylotan,

11
-1. Ho la sensazione che CEGUI sia popolare solo perché esiste e la gente lo menziona come un goto predefinito (come questo). Quando l'ho usato, l'ho trovato imbarazzante ed estremamente goffo.
Bobobobo,

@bobobobo Concordato. È popolare perché esiste. È la gui "ufficiale" per Ogre (qualunque cosa significhi) ma trovo abbastanza ingombrante codificare. Inoltre, il RAD gui builder è un buggy (ancora in fase di sviluppo).
Cheshirekow,

1
caro imgui sembra essere un buon esempio di quanto possano essere versatili le IMGUI. Devo ancora provarlo ma sembra abbastanza promettente.
legends2k,

13

Di recente mi sono imbattuto in Gwen . È una libreria GUI scritta dall'autore di Gary's Mod. Ha la licenza MIT come dovrebbe essere una buona libreria di giochi.
Logo Gwen
La biblioteca ha diverse cose da fare.

  • Widget di grandi dimensioni
    Gwen è in fase di sviluppo da alcuni anni e lo dimostra.
  • Facile personalizzazione del renderer di backend
    Questo è grande. La libreria viene fornita con un renderer OpenGL ricostruito. Ma creare un renderer è abbastanza semplice che probabilmente vorrai costruire un renderer specifico per il sistema di rendering del tuo gioco.
  • Meno ripieno
    Gwen sembra essere dalla parte più leggera della GUI del gioco. Nessun XML, nessun renderer HTML, solo un semplice C ++. Anche Gwen non viene fornito con i caricatori di immagini. Si aspetta che il backend del renderer gestisca il caricamento. Mi piace questa funzione in quanto mantiene piccola la libreria e il sistema di rendering del mio gioco gestisce già le trame.
  • Skinable
    Non è la prima cosa da fare, ma alla fine dovrai personalizzare la tua GUI per il tuo gioco.
  • Skin skin C ++
    Non sono uno sviluppatore web e trovo difficili le GUI html css centric.
  • Iniezione di input
    Questo è grande per i giochi. È sempre una seccatura usare i sistemi di interfaccia grafica che vogliono possedere il polling di input.
  • multipiattaforma
    La libreria si sforza di essere multipiattaforma ma ammettono che potresti trovare problemi su piattaforme meno utilizzate.
  • sviluppato attivamente
    Inoltre, è molto più piccolo di CEGUI o MyGUI, quindi l'hacking o l'invio di patch è molto più pratico.

Tuttavia, ecco i contro per questo:

  • Non c'è una sola pagina di documentazione. Nemmeno un sito web, solo il repository github.
  • I renderer in pacchetto mancano di portabilità, quindi dovrai scriverne uno tuo nel caso ne avessi bisogno.
  • ???

2
Manca di documentazione, non portatile (ancora), back-end aperto incompleto, ecc. Non è possibile capire dai materiali online se ha file io dialoghi (o dialoghi, del resto).
Jari Komppa,

Sono d'accordo che manca la documentazione. La libreria principale è multipiattaforma. Tuttavia, il renderer e i sistemi di input mancano per altre piattaforme. Per me questo non è un problema in quanto ho creato un renderer su misura per me sistema di rendering.
deft_code

1
Non avere xaml / html / css non è certo un vantaggio. Questo è ciò per cui sono state create queste cose e lo fanno molto meglio del C ++.
user441521

7

Ci scusiamo per la risposta tardiva, ma potresti voler dare un'occhiata a un framework UI OpenGL chiamato GG . GG è stato sviluppato come parte del progetto FreeOrion ed è incluso nel loro repository SVN (e nel loro SDK scaricabile). Sembra abbastanza capace. Ho incluso uno screenshot qui sotto; puoi fare clic sull'immagine per visualizzare la versione completa.

Schermata dell'interfaccia utente basata su GG di FreeOrion


Sembra che GG venga spostato in un progetto separato gigi su sourceforge.
deft_code

Non mi sorprenderebbe. Lo hanno tenuto intenzionalmente disaccoppiato da FreeOrion.
Mike Strobel,

Ho appena trascorso un'intera serata su di esso e ha davvero bisogno di un file CMake. Mi piace l'aspetto grafico, non mi piace che usi Boost.
knight666,

GG può essere trovato qui: gigi.sourceforge.net
MichaelHouse

Buona fortuna a farlo costruire sotto Windows.
3Daveva il

5

MyGUI è una soluzione piuttosto buona sia per DirectX che per OpenGL.


4

Dai un'occhiata a AntTweakBar , viene utilizzato da Cinder . C'è anche una nuova libreria GUI sviluppata per Cinder nelle opere: SimpleGUI .

Se vuoi andare in HTML + CSS c'è Awesomium (usato da Wolfire Games nel loro gioco Overgrowth ) e un'alternativa gratuita chiamata Berkelium .


AntTweakBar è fantastico, ma piuttosto limitato. È ottimo per quello per cui è progettato - ottimizzazione dei valori e integrazione estremamente semplice - ma non utile come toolkit generico per l'interfaccia utente.
Jari Komppa,

3

Ho giocato con QuickGUI e MyGUI . Sono entrambe le librerie di Ogre GUI che recentemente hanno eliminato il requisito di Ogre. Non ho ancora troppa esperienza con entrambi, ma sembra che rimarrò fedele a QuickGUI, in quanto è molto più piccolo e più semplice.

Non sono sicuro che il wiki QuickGUI sia stato ancora aggiornato per puntare alla versione più recente di Ogre-free. Ecco l'ultima versione.

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

Il repository ha visto alcuni aggiornamenti multipiattaforma, quindi sarà meglio usare direttamente svn.

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

Nome utente:
password anonima : QuickGUI

Infine ecco il breve wiki su come aggiungere diversi backend di rendering. http://www.ogre3d.org/tikiwiki/QuickGUI+Integration+Tutorial

MyGUI sembra avere più funzionalità al costo di gonfiarsi. E onestamente se la semplicità non è un requisito CEGUI fa saltare MyGUI fuori dall'acqua.


Ho provato MyGUI ed è davvero estremamente gonfio, non lo consiglio davvero se vuoi risparmiare spazio. Continuo a armeggiare per far funzionare QuickGUI.
Cristina,

1
Ho provato entrambi, ho usato CEGUI per il tempo più lungo, ma è stato assolutamente orribile non menzionare estremamente lento con un sacco di testo. Sono passato a MyGUI di recente e ha funzionato bene. Il layout e gli editor di skin sono molto curati. Non sono sicuro del gonfio, penso che CEGUI sia molto gonfio in confronto. Alcune delle pratiche in MyGUI sono strane (ad esempio + = operatore per l'assegnazione di delegati, e anche il casting è fatto in modo strano - gli autori lo stanno attivamente sviluppando e ascoltando suggerimenti che sono fantastici) ma nel complesso lo preferisco a CEGUI.
Samaursa,

@Samaursa + = operatore significa che puoi aggiungere più di un delegato.
Ocelot,

3

Consiglierei QT, poiché è multipiattaforma, C ++ e puoi ottenerne una versione Open Source con la licenza LGPL. È anche facile da usare e ha molti componenti già pronti che puoi usare.


6
Non pensare che sia un'interfaccia utente basata su OpenGL.
DeadMG,

Non dice che dovrebbe essere basato su OpenGL, o sto fraintendendo completamente la domanda? L'ho letto dato che non vuole prendere il controllo di FreeGLUT, di cui QT è più che capace.
martiert,

Secondo questo! Uso qt e ha quasi tutto ciò che serve quando stanno iniziando. Nel corso degli anni è diventato molto stabile, con un buon supporto. Hanno anche un framework per giochi chiamati gluon.
brainydexter,

8
Il problema con QT e framework in generale è che controllano il loop principale. Questo di solito non si presta bene ai giochi.
deft_code

1
Se l'interfaccia utente non è OpenGL, allora ti consiglio di sbarazzarti del ciclo principale, utilizzando l'interfaccia utente basata su eventi ed eventi e timer per il gioco + la grafica. Comunque, ho usato QT e non lo consiglio.
Danny Varod,

3

I creatori potrebbero spararmi per averlo detto, ma ho trovato GLFW semplicemente fantastico nel creare framework GUI multipiattaforma. La gente dello sviluppo GLFW continua a parlare di GLFW non gestisce la GUI. Si fa tuttavia fare un lavoro bello, semplice, pulito e completamente portatile di gestire la grafica, gli eventi e le attività del mouse / tastiera / joystick.

La cosa bella di GLFW per me è che è abbastanza piccolo, non richiede alcun codice specifico di sistema, né GLUT ed è ben mantenuto. Finora è stato stabile per l'uso su progetti OpenGL 4.1. Rispetto a qualcosa come SDL, adoro il piccolo overhead ed è stato facile scrivere classi di gestori della GUI.

In alternativa, dai un'occhiata a FLTK . Può essere usato per ogni genere di cose e riutilizzato in modo molto semplice. È utilizzato davvero per la creazione di applicazioni ma è perfettamente in grado di gestire oggetti 3D ed è basato su OpenGL. Molto piccolo, ben supportato e anche se non vedo molte persone creare interfacce personalizzate a livello di progettazione del gioco, ce ne sono alcune che sembrano funzionare alla grande.


1
Glfw non è solo una libreria per astrarre il codice di windowing su piattaforme desktop? Come riesci a creare grafici con esso?

1
@GabrieleVierti, come ho detto, gestisce anche input accelerati multipiattaforma. oltre a ciò, in particolare, ti aiuta a ottenere un contesto OpenGL o Vulkan barebone e gestisce gran parte della piastra di caldaia. Con il contesto, ho appena implementato una piramide istogramma degli hotspot sullo schermo e lo uso come parte principale del gestore di eventi click / type. quindi i controlli si associano a un posto sulla piramide. normali comandi di disegno per l'impostazione della grafica effettiva. qualsiasi kit di interfaccia utente per roba web funziona bene o più arte specifica del dominio
Garet Claborn,

Sarebbe molto più semplice aggiungere un framework gui pre-made (come il caro ImGui)

1
ImGui funziona in modalità immediata, quindi perderai l'accelerazione hardware. le cose che ho menzionato dovevo comunque tenere traccia del rendering del gioco, quindi l'aggiunta di alcuni overlay 2D non era una considerazione importante. posso vedere come sarebbe una seccatura per alcuni progetti
Garet Claborn,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.