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

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

1

26.03.2016, 19:43

OpenGl Control für Wpf

Hi,
in einer Anwendung möchte ich 2d Texturen darstellen, die in eine 3d Umgebung gerendert werden.

Als Basis könnte ich Unity, etc. verwenden. Da in dieser Anwendung aber mehr Wert auf die Benutzeroberfläche, als in die Darstellungsfunktion gelegt wird, würde ich gerne Wpf verwenden. Die UI Toolkits der GameEngines die ich bisher gesehen habe sahen entweder nicht wie Standard System Controls aus, oder waren nur umständlich zu benutzen.

Deswegen interessiert es mich, ob ihr gute Wpf Controls für OpenGl, etc. kennt. Oder noch besser, ein Wpf Control für eine Graphic Engine wie Sfml.

Bisher habe ich das SharpGl Wpf Control gefunden, das allerdings in der Beispiel Anwendung nach ein paar Sekunden abstürzt, da es den Arbeitsspeicher füllt bis zur OutOfMemory Exception.

Schönes Osterwochenende euch.

Gruß,
MitgliedXYZ

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

2

26.03.2016, 20:43

Ideal wäre es natürlich, wenn der Fehler nicht an dem Beschriebenen Weg an und für sich liegt und du die Ursache ausfindig machen kannst. (Tritt der gleiche Fehler auch dann auf, wenn in OpenGLControl_OpenGLDraw nichts gemacht wird?)

Wenn du den Fehler nicht beheben kannst, könntest du den umständlicher Weg über Windows Form Host (oder so) gehen, wo du wiederum ein Handle erhältst, welches weiterverwendet werden könnte. (Bedenke dabei aber, dass Windows Forms-Elemente immer über allen WPF-Elementen des gleichen Fensters gezeichnet werden. Um dieses Problem zu umgehen, müsste der Windows Form Host skaliert werden, sollte er sich in einem Bereich dynamischer Größe befinden, da auch ein ScrollPanel unter dem gleichen Problem leiden würde.)

Vielleicht gibt es auch noch andere, bessere Wege. An anderer Stelle im Forum wurde bereits beschrieben, wie man sowas für DirectX bzw. XNA machen kann, allerdings weiß ich nicht mehr, ob die Lösung auf OpenGL übertragbar wäre... =/
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

26.03.2016, 23:27

Muss es unbedingt OpenGL sein? Wenn du schon WPF verwenden willst, wieso dann nicht Direct3D? Ich fürchte mit OpenGL in ein WPF Fenster rendern wird nicht wirklich sauber möglich sein...

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

4

27.03.2016, 09:07

Also es muss nicht OpenGl sein.
Aber bei XNA bin ich mir nicht sicher, ob es eine gute Idee ist, das noch zu verwenden, da es seit ein paar Jahren nicht mehr weiterentwickelt wird.
DirectX zu verwenden wäre auch noch eine Möglichkeit.

Hat jemand das schon mal mit Wpf verwendet, ist es empfehlenswert?

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

5

27.03.2016, 12:33

Ich benutze in meinem Editor ein SharpDX-Control zusammen mit WPF. Allerdings kann ich mich nur wiederholen (die Frage kam schonmal auf): Es ist nicht wirklich schön, in WPF 3D-Views einzubauen, da hat es WinForms deutlich leichter. Dafür eignet sich vielleicht das Helixtoolkit. Ich hatte damals eine eigens gebaute Lösung aus mehreren Tutorials genommen, weil ich MonoGame brachte. Da hat man dann immer etwas Freude mit den Assemblyversionen von SharpDX.

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

6

27.03.2016, 13:27

Was genau den Fehler bei SharpGl ausgelöst hat, weiß ich nicht, so viel habe ich damit noch nicht experimentiert. Aber es ist halt nicht gut, wenn schon beim unveränderten Beispiel Projekt der Arbeitsspeicher überläuft. Wenn ich die Anwendung erst einmal darauf aufgebaut habe, wäre es unschön, wenn durch das Control solche Fehler enstehen, die evtl. schwierig zu beheben sind.

Deshalb würde ich am liebsten gleich mit der Technik beginnen, die sich am besten dafür eignet. Wenn also Wpf mit 3d Elementen keine so gute Idee ist (warum eigentlich, ist das technisch schlecht machbar, oder wird es einfach von der Entwickler Community zu wenig verwendet?), wie wäre es dann mit der Kombination Qt + OpenGl. Windows Forms und XNA wären bestimmt eine Möglichkeit, für den Galactineers Editor wurde es ja verwendet, wenn ich mich richtig erinnere, aber ich hätte gerne eine Oberfläche die modern aussieht.

An was ich auch schon gedacht habe, wäre eine Html5 Oberfläche, mit WebGl gibt es da ja auch schon ein paar Möglichkeiten. Allerdings muss ich auch viel aufs Dateisystem zugreifen und die Performance von Web Anwendungen wird immer noch nicht so gut sein, wie die von nativen Anwendungen.

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

7

27.03.2016, 14:02

Wenn also Wpf mit 3d Elementen keine so gute Idee ist (warum eigentlich, ist das technisch schlecht machbar, oder wird es einfach von der Entwickler Community zu wenig verwendet?)


Problem ist, dass WPF selbst Direct3D9 für alles benutzt und seine Oberfläche komplett abgeschottet von der eigentlichen C# Umgebung regelt. Es gibt einen extra Renderthread, der die Oberläche in WPF aktualisiert. Wenn du Direct3D verwendest, dann renderst du mit im Kontext der eigentlichen WPF RenderEngine. Das hat den Nachteil, dass auch das aktualisieren deiner eigentlichen Steuerelemente langsamer wird, wenn dein eigener 3D-Code viel Leistung braucht und umgekehrt.
Man kann es auch komplett separat machen, allerdings hast du dann immer den Spaß, das ganze mit dem Renderthread von WPF zu synchroniseren und musst ggf. immer in ein D3D9-kompatibles RenderTarget konvertieren. So im Groben, sonst musst du nochmal detailliert nachlesen. Und da das ganze nicht wirklich direkt von Microsoft unterstützt wird, sondern man es immer "reinhacken" muss, ist es nicht die ideale Lösung.

Allerdings fällt mir ein, dass es für Windows 10 Apps wohl direkt ein Control gibt, habe ich mich aber noch nicht direkt mit beschäftigt.

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

8

27.03.2016, 18:07

Das mit dem Direct3D9 in Wpf wusste ich nicht, aber wenn dann meine GUI während dem Rendern einfrieren würde, wäre das auch keine gute Lösung.

Es gibt Texture Sharing Librarys wie Spout, wäre das für meinen Anwendungsfall eine gute Idee? Ich könnte z.b. mit Openframeworks in eine Textur rendern und diese dann in einer Wpf Anwendung ausgeben.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »MitgliedXYZ« (27.03.2016, 18:30)


CeDoMain

Alter Hase

Beiträge: 587

Wohnort: Ilmenau

Beruf: Student für Mechatronik

  • Private Nachricht senden

9

27.03.2016, 18:51

Es ist nicht wirklich schön, in WPF 3D-Views einzubauen, da hat es WinForms deutlich leichter.
Wenn du damit keinen Viewport3D meinst, dann kann ich dir das hier empfehlen! Ich habe das mal für einen selbstgebauten Ultraschall-Raumscanner verwendet. Die Verwendung ist sehr einfach, es wird sich an den C# .NET Stil gehalten und weil das Rendern schon zur Design-Time funktioniert kann man im WPF-Designer ohne das Programm ausführen zu müssen schon viele Fehler finden. :) Texturen sind auch möglich. Wenn du Fragen haben solltest, helfe ich dir gerne!
Mit freundlichem Gruß
CeDo
Discord: #6996 | Skype: cedomain

Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

10

27.03.2016, 21:10

Ach stimmt, das Zeug gibt es ja auch noch. Je nach Anwendungsfall jeden Blick Wert ;)

Werbeanzeige