Laden...

WPF vs. GDI+ vs. MDX usw...

Erstellt von Jack_AI vor 16 Jahren Letzter Beitrag vor 16 Jahren 5.259 Views
J
Jack_AI Themenstarter:in
193 Beiträge seit 2007
vor 16 Jahren
WPF vs. GDI+ vs. MDX usw...

Hallo.

Nachdem ich mal 3D-Programmierung mit C# probieren wollte und auch bald auf die gravierenden Nachteile von GDI+ und MDX und OpenGL usw. gestoßen bin (siehe Thread "Einfacher Einstieg in 3D"), bin ich auch auf WPF gestoßen. Von WPF habe ich zuvor noch nie etwas gehört. Ich habe mal ein klein wenig angefangen Managed Direct X zu lernen, habe aber aufgehört, da es ja eine "Zeitbombe" sein soll. Das war schon ziemlich frustrierend. Jetzt habe ich mich in GDI+ eingelesen und muss jetzt wieder frustriert feststellen, dass es schon wieder etwas besseres geben soll (WPF).

Mir fehlen derzeit die Anhaltspunkte. Die Problematik verwirrt mich zunehmend. Einige Fragen, die sich mir stellen:

  • WPF soll auf DirectX basieren. Wie funktioniert denn das, wenn die Weiterentwicklung von DirectX für C# eingestellt wurde?
  • Kann man WPF für 3D-Darstellungen nutzen? Ist es dafür geeignet?
  • Ist WPF, ohne den höheren Performance-Anspruch zu berücksichtigen, immer GDI+ vorzuziehen?
  • Ist WPF für 2D-Spiele geeignet?
  • Welche Erfahrungen habt ihr gemacht?
  • Kann mir jemand gute Tutorial zu WPF empfehlen?

Danke im Voraus für die Aufklärung,
Jack

C
1.214 Beiträge seit 2006
vor 16 Jahren

Ich würd jetzt einfach mal behaupten, du hast noch nicht sehr viel Programmiererfahrung und dir erstmal von 3D generell abraten. Sammle erstmal mehr Erfahrung. 3D ist an sich recht kompliziert, außerdem nehm ich einfach mal, dass dir der mathematische Hintergrund fehlt. Das kann nur frustrierend werden. Wenn du unbedingt schnell einsteigen willst, kann ich persönlich XNA weiterempfehlen. Damit ist mir der Einstieg am einfachsten gefallen. Aber ohne fundierte Kenntnisse wirst du mit keiner Technologie weit kommen.

49.485 Beiträge seit 2005
vor 16 Jahren

WPF soll auf DirectX basieren. Wie funktioniert denn das, wenn die Weiterentwicklung von DirectX für C# eingestellt wurde?

WPF benutzt eben direkt DirectX und nicht Managed DirectX.

Kann man WPF für 3D-Darstellungen nutzen? Ist es dafür geeignet?

Ja, aber vielleicht nicht so wie du denkst. 🙂 Siehe nächsten Punkt.

Ist WPF, ohne den höheren Performance-Anspruch zu berücksichtigen, immer GDI+ vorzuziehen?

Ich würde WPF nicht mit GDI vergleichen, sondern eher mit WindowsForms. Also erstmal stellt WPF Controls zu Verfügung genauso wie Windows-Forms.

Ist WPF für 2D-Spiele geeignet?

Wenn man mit Windows.Forms 2D Spiele machen kann, wir das auch mit WPF gehen.

Kann mir jemand gute Tutorial zu WPF empfehlen? [Artikel] Einführung in die WPF(Windows Presentation Foundation) - aktuell Teil 3: Beispielanwendung

herbivore

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Coder007,

enn du unbedingt schnell einsteigen willst, kann ich persönlich XNA weiterempfehlen.

nur zur Sicherheit: bitte in diesem Thread hier nicht noch mal den Leichter Einstieg in die 3D-Programmierung unter C#? diskutieren, sondern bei Bedarf dort

herbivore

F
722 Beiträge seit 2005
vor 16 Jahren

Es kommt halt drauf an was du genau machen möchtest.
WPF ist vor allem ein Framework für die Entwicklung von Windows Anwendungen. Controls können beliebig zusammengestellt und mit Effekten versehen werden.
Wenn du aber z.b. ein 3d Spiel schreiben willst, würde ich dir ehr von WPF abraten. Dafür gibt es die genannten Engines/Bibliotheken, mit denen du sicherlich besser die gewünschte Performance dafür erreichen kannst.

J
Jack_AI Themenstarter:in
193 Beiträge seit 2007
vor 16 Jahren

Danke schon mal für deine sehr hilfreiche Antwort, herbivore. Ich würde aber gerne noch auf ein paar Punkte eingehen. Vielleicht kann mir hier ja jemand anderes weiterhelfen.

Kann man WPF für 3D-Darstellungen nutzen? Ist es dafür geeignet?
Ja, aber vielleicht nicht so wie du denkst. 🙂 Siehe nächsten Punkt.

Mit 3D-Darstellungen meinte ich so etwas wie flüssige Darstellung von bewegten 3D-Modellen.

Ist WPF, ohne den höheren Performance-Anspruch zu berücksichtigen, immer GDI+ vorzuziehen?
Ich würde WPF nicht mit GDI vergleichen, sondern eher mit WindowsForms. Also erstmal stellt WPF Controls zu Verfügung genauso wie Windows-Forms.

Mein Fehler. Ich meinte natürlich Windows-Forms. Um also zur ursprünglichen Frage zurück zu kommen: Gibt es, außer Performance-Verlust, sonstige Nachteile gegenüber Windows-Forms?

Ist WPF für 2D-Spiele geeignet?
Wenn man mit Windows.Forms 2D Spiele machen kann, wir das auch mit WPF gehen.

...wobei ich hier im Forum gelesen habe, dass die Möglichkeiten für 2D-Spiele doch stark beschränkt sind. Also, dass zum Beispiel 2D-Jump-and-Runs in der Art von Super Mario kaum performant möglich sind.

Grüße,
Jack

edit:
@feadur: Ich verstehe. Das dürfte dann so ziemlich meine Frage zur 3D-Darstellung beantworten. Danke.

I
1.739 Beiträge seit 2005
vor 16 Jahren

ist WPF für 2D-Spiele geeignet?

Ja, genauso wie Flash oder der kleine (in Entwicklung befindliche) "Bruder" von WPF namens Silverlight.
Davon abgesehen ist die 2D-API unterhalb des XAML-krams auch leistungsfähiger als GDI-Plus(seltsames Thema irgendwie, da sowohl Erweiterung als auch Aufsatz auf GDI+ bestehender Funktionen, die bisher nur schwer unter .Net erreichbar waren).
So richtig toll unter (3.0/3.5 mit MediaAPI sind vor allem Boolsche Pfadoperationen und der Animationsteil).

2D-Spiele gingen auch schon so... Ein Teil der ehemaligigen DirectX-API ist übrigens schon abgewandert in Standard-SDKs(DirectDraw)...

3D geht mit OpenGL, DirectX(welche Version eigentlich)...

...wobei ich hier im Forum gelesen habe, dass die Möglichkeiten für 2D-Spiele doch stark beschränkt sind. Also, dass zum Beispiel 2D-Jump-and-Runs in der Art von Super Mario kaum performant möglich sind.

Keine Ahnung was du gelesen hast oder unter performant verstehst.
Mit reinem SW-Rendering(GDI+ derzeit nur SW-Unterstützung) bekommst du fliessende Animationen hin). Bei Abladung von Rechenleistung auf Grafikkarten und Physikkarten ist dir mögliche Komplexität höher, oder nicht..., zumindest kippt eine "Highperformancelösung", die vielleicht nicht mal angemessen ist, eher den Rechner falls z.B:: unter Win irgendein Popupfenster sich meldet.

Mein Tipp:
Werd dir zuerst klar was du machen willst, Dann wie. - Die Darstellung betreffend.

J
Jack_AI Themenstarter:in
193 Beiträge seit 2007
vor 16 Jahren

Danke für die Antworten bis hier her.

Vielleicht noch eine kurze Frage, bevor ich mich "ins Vergnügen stürzen": In wie fern lassen sich Windows-Forms und WPF kombinieren? Also, wenn ich bereits eine Anwendung mit Windows-Forms erstellt habe, kann ich dann nachträglich noch Elemente aus WPF einfügen?

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo Jack_AI,

das wird wohl nicht gehen. System.Windows.Forms.Forms kann man nur System.Windows.Forms.Controls (=WinForm-Control-Klasse) hinzufügen, keine System.Windows.Controls.Controls (=WPF-Control-Klasse).

herbivore

5.742 Beiträge seit 2007
vor 16 Jahren

Hallo,

auch wenn die Frage etwas vom Thema abweicht:
Besitzen WPF-Controls eigentlich noch ein Handle, sodass man diverse WinApi Aufrufe (AnimateWindow, etc.) tätigen kann oder sind diese vollständig inkompatibel mit den "jetzigen" Controls?

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo winSharp93,

ich gehe davon aus, dass die WPF-Controls nicht auf den alten Win32-Controls aufbauen, die ja wiederum auf GDI aufbauen wogegen WPF ja DirectX nutzt. Es wird also nicht möglich sein, die alten Win32 Funktionen für WPF zu benutzen.

herbivore

I
1.739 Beiträge seit 2005
vor 16 Jahren

@winSharp93:
Interop wird unterstützt. Du kannst Winformcontrols in WPF einbinden und WPF in Winforms darstellen.
Antwort: definitiv ja, Handles gibt es(leider...).
Problematisch ist allerdings die Mixtur zwischen Rendern in WPF und GDI+. Zumindest hab ich das gelesen, probiert aber noch nicht.

5.742 Beiträge seit 2007
vor 16 Jahren

Original von ikaros
Antwort: definitiv ja, Handles gibt es(leider...).

Danke für die Antwort.

Reagieren dann die WPF - Controls auch auf Windows - Messages, sodass man z. B. ein WM_MOUSEHOVER senden kann und der Button, etc. dann eine eventuelle Hover - Animation durchführt?

I
1.739 Beiträge seit 2005
vor 16 Jahren

ja, ich muss aber erst nachkramen in meiner Linksammlung.

F
722 Beiträge seit 2005
vor 16 Jahren

WPF Controls haben keine Handles. Du kannst ihnen deshalb auch keinerlei Windows Messages schicken. Eine Ausnahme bildet hier nur die Klasse Window, deren Handle über einen WindowInteropHelper in Erfahrung gebracht werden kann. Ansonsten werden sämtliche Controls über das Rendering System von WPF verwaltet, was wiederrum auf DirectX aufsetzt.
Was ebenfalls wie gesagt möglich ist, ist das Einbinden von WPF Controls in Win32- oder WinForms Fenster. Das ändert aber nichts daran dass die Controls selbst nicht auf Fensternachrichten reagieren.

I
1.739 Beiträge seit 2005
vor 16 Jahren

WPF Controls haben keine Handles.

ROFL, Zauberei?

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo ikaros,

ich gehe auch eher davon aus, dass WPF-Controls keine Handles haben. Verwechselst du vielleicht Win32-Controls (die natürlich Handles haben) mit WPF-Controls (die wohl eher keine brauchen)?

Aber vielleicht sollten wir nicht weiter spekulieren, sondern "Beweise" anführen. Dabei sollte es dir leichter fallen zu "beweisen", dass es Handles gibt, als es uns fallen würde zu "beweisen", dass es sie nicht gibt. Vor allem, da du so ohne Zweifel davon überzeugt bist.

herbivore

F
722 Beiträge seit 2005
vor 16 Jahren

hallo zusammen,

ich habe einen sehr netten Artikel aus dem dotNet-Magazin gefunden, nach dessen Lektüre sicherlich klar sein sollte, warum WPF Controls keine Handles mehr haben...

Gruß

I
1.739 Beiträge seit 2005
vor 16 Jahren

hier ist der versprochene Link:

Migration und so

Die Samples sollten eigentlich alles abdecken was man so braucht.

Thema Handles:

Mach ich vielleicht später genauer.
Hier erstmal grob:
Controls benötigen Container, Pens, Brushes, Fonts usw. Diese Ressourcen werden über Handles verwaltet.

edit:
@feadur
ich wollte dich nicht ärgern, mir ist schon klar das du Windowhandles meinst

49.485 Beiträge seit 2005
vor 16 Jahren

Hallo ikaros,

Pens, Brushes & Co sind doch GDI- also Win32-Objekte. Diese haben Handles. Aber das sagt doch noch lange nicht, ob die Zeichenobjekte unter WPF auch Handles haben. Davon abgesehen geht es doch wirklich um die Frage, ob WPF-Controls Handles haben. Ich denke mal so viel ist klar, nämlich dass sie standardmäßig keine brauchen.

herbivore

I
1.739 Beiträge seit 2005
vor 16 Jahren

Original von herbivore
Hallo ikaros,

Pens, Brushes & Co sind doch GDI- also Win32-Objekte. Diese haben Handles. Aber das sagt doch noch lange nicht, ob die Zeichenobjekte unter WPF auch Handles haben.

Pens, Brushes & Co gibt es auch unter WPF. Unter .Net haben diese allerdings nicht mehr die Dispose-Methode um das Aufräumen interner Ressourcen zu handlen sondern einen noch ominösen Automatismus.
Es gibt da durchaus neues. Handles sind trotzdem da. Warum?
Weil jede Art von Ressourcenzugriff unter Windows mittels Handles realisiert wird. Der Mediacore kann zwar sparen(Ein Gradient geht als Beschreibung zur GPU falls sie das versteht) aber keine Wunder wirken(Handle auf Bitmap(Filehandle) eines TextureBrushes, oder AVI-Handle eines Media-Brushes). Erstrecht kann der Mediacore nicht einfach das OS ersetzen, er setzt drauf auf.

Edit: Mediacore = Presentationcore(sorry)

Davon abgesehen geht es doch wirklich um die Frage, ob WPF-Controls Handles haben. Ich denke mal so viel ist klar, nämlich dass sie standardmäßig keine brauchen.

herbivore

WPFControls aggregieren Ressourcen, damit haben sie direkt oder indirekt die Handles am Hals.
Vielleicht ist es besser zu sagen(indirekter Fall): die Controls erfordern Handles. Die Verwaltung kann ja durchaus zentral woanders erfolgen.