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:
Danke im Voraus für die Aufklärung,
Jack
-> Informatik-Infotainment <-
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.
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
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
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.
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.
-> Informatik-Infotainment <-
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.
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?
-> Informatik-Infotainment <-
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
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?
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
@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.
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?
ja, ich muss aber erst nachkramen in meiner Linksammlung.
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.
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
hier ist der versprochene Link:
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
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
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.