Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Sc4v

Alter Hase

  • »Sc4v« ist der Autor dieses Themas

Beiträge: 376

Beruf: Student

  • Private Nachricht senden

1

20.12.2013, 15:07

Beratung: GUI around OpenGL

Hi zusammen,

ich habe von GUI Programmierung nicht viel Ahnung, erst Recht nicht unter C++. Ich kenne lediglich Swing und AWT aus Java. Es ist an der Zeit sich damit zu beschäftigen.
Angenommen ich habe ein OpenGL Rendering von irgendeiner Szene, beispielsweise einen Volumenrenderer (Raycaster) oder einen Raytracer und um diesen herum möchte ich dann eine GUI basteln die mit der Szene interagieren lässt. Im Rahmen von C++ stößt man recht schnell auf Qt und QML. Ein Freund rät mir die GUI mit C# und WPF zu schreiben (ich spreche auch C#, kein WPF). Sowas habe ich jedoch noch nie gemacht, ist das ratsam? Oder eignet sich Qt dafür? Kann ich QML dafür benutzen? Gibt es weitere Alternativen?
Um vielleicht ein wenig zu konkretisieren: Ich stelle mir so etwas vor wie zB Unity (selbstverständlich in einem kleinerem Rahmen), bedeutet ich habe eine Desktop Applikation in der ich 2,3 oder mehr Viewports von meiner Szene rendern kann. Diese "Widgets", falls das die korrekte Bezeichnung ist, lassen sich auch per Maus skalieren. Jetzt habe ich noch ein reines GUI widget in der ich zB Objekte aus dem Szenegraph selektieren kann und Eigenschaften verändern kann.

Hoffe auf konstruktiven Input und bedanke mich schonmal
Sc4v

eXpl0it3r

Treue Seele

Beiträge: 386

Wohnort: Schweiz

Beruf: Professional Software Engineer

  • Private Nachricht senden

2

20.12.2013, 15:22

Wenn die GUI nur um das Rendering sein muss, dann kann ich dir für C++ Applikationen Qt sehr empfehlen. Da gibt es dann auch den Qt Creator, mit welchem man relativ einfach GUIs erstellen kann.

Ich denke jedoch, dass du dir zuerst einmal bewusst machen sollst, was du denn genau willst. Spielt ja schon etwas eine Rolle, ob du C#, C++ oder dann doch Java verwenden möchtest. ;)

Nebst Qt gibt es in der C++ Welt aber noch andere UI Libraries, z.B. GTK, wXWidgets, etc.
Blog: https://dev.my-gate.net/
—————————————————————————
SFML: https://www.sfml-dev.org/
Thor: http://www.bromeon.ch/libraries/thor/
SFGUI: https://github.com/TankOs/SFGUI/

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

20.12.2013, 15:35

Mein Rat wäre C# und WPF, wenn es eine Windows Desktopanwendung sein soll.

Sc4v

Alter Hase

  • »Sc4v« ist der Autor dieses Themas

Beiträge: 376

Beruf: Student

  • Private Nachricht senden

4

20.12.2013, 17:56

Okay danke schonmal für den Input.
Wie sähe es mit QML aus? Kann ich da einen OpenGL 4.4 Context bekommen und mit bestehenden Code ohne große Anpassung in ein "Widget" von QML rendern?

5

20.12.2013, 18:34

Ich habe QML noch nie benutzt, aber in Qt ist es eigentlich ziemlich einfach, ein OpenGL-Widget anzulegen. Den Render-Code musst du dafür nicht anpassen (von Details wie Viewport und Co. einmal abgesehen).
Lieber dumm fragen, als dumm bleiben!

6

20.12.2013, 19:30

Also ich würde dir auch zu C# + WPF raten, wenns nur Windows sein soll. Allerdings habe ich noch nie etwas "größeres" damit gemacht.

@dot: Wie genau würdest du den Renderer, der in C++ programmiert wurde, in WPF integrieren? C++/Cli?

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

7

20.12.2013, 20:05

OpenGL + WPF würde ich lassen, damit habe ich nur schlechte erfahrungen gemacht vor allem bzgl. Performance. Das Einbinden von OpenGL/Direct3D in WPF ist mehr oder weniger ein Hack und wird offiziell nicht wirklich untsrstützt, wohl mit Absicht. Selbst mit Direct3D innerhalb einer WPF-Anwendung hat man ziemlich "spass". Ich würde für OpenGL auch zu Qt raten. Wenn jedoch nicht sehr viel 3D gerendert werden muss, kann man auch mit WPF-Bordmitteln rendern. Aber die performance ist da natürlich auch ziemlich schlecht im vergleich zu einer nativen Implementierung. Wenn du C# nutzen willst, dann wäre WinForms wesentlich besser geeignet, dort gibt es dann gute Performance.

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

8

20.12.2013, 20:09

Also noch nicht versucht mit DirectX in ein WPF Fenster zu rendern, aber müsste das nicht wie überall sonst auch so laufen, dass du dir das Handle von dem Fenster holst, wo du reinrendern willst und dann eben damit DirectX initialisierst?

Powerpaule

Treue Seele

Beiträge: 162

Wohnort: Berlin

Beruf: Softwareentwickler

  • Private Nachricht senden

9

20.12.2013, 20:35

Ich kann auch zu Qt mit OpenGL raten. Bestehenden Code dort einzubauen ist kein Problem. Je nachdem was du hast kann es aber sinnvoll bzw. nützlich sein, ihn an ein paar Qt-Sachen anzupassen (bspw. sowas wie QShaderProgram)
GUI ist mit Qt und dem Signal/Slot-System auch relativ einfach zu machen.
Wenn es nur für Windows ist, kannst du auch getrost Qt 5.2 nehmen.
Bei Mac ist eine 4er-Version unter Umständen besser, da Qt5 an einigen Stellen da noch etwas buggy ist... wobei bei eher trivialen Benutzeroberflächen keine Probleme auftreten.

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

10

20.12.2013, 21:54

@Sylence: Ja, es funktioniert technisch. Aber wenn du wirklich intesiv damit arbeitest wirst du zumindest mit OpenGL probleme haben. Direct3D geht noch einigermaßen von der performance, aber schön ist anders. Du hast halt einen Retained-Mode renderer für den rest, den du nicht kontrollieren kannst (und nicht SOLLST). Dann hängst du ein Control herein, dass einfach etwas obendrüber zeichnet, was du auch noch seperat neben dem WPF-Renderthread handeln musst. Keinesfalls schön :)

Werbeanzeige