Jul 02

RK 2048 – Ein Spiel vollständig als Universal App entwickelt

ThumbnailEin völlig verregneter Sonntag, nichts wirklich vor, was kommt dabei raus? Richtig, ein kleines Spiel. Letzten Sonntag habe ich die frisch auf Windows Phone portierte 3D-Engine verwendet, um einen kleinen 2048 Klon zu bauen. Der Screenshot zeigt das Ergebnis. Sieht an sich relativ gut aus und funktioniert auch überraschend gut. Ein paar Bugs gibt es sicherlich noch, ein paar Optimierungen für das Phone sind noch nötig, viel mehr als einen weiteren solchen verregneten Tag braucht es aber höchstwahrscheinlich nicht mehr. Das Besondere an dem Thema von der technischen Seite ist, dass es das neue Template für Universal Apps verwendet. Der gleiche Code läuft also für Windows 8.1 und für Windows Phone 8.1 – ganz ohne Compiler-Flags oder dergleichen. Weiterlesen

Jun 16

Portierung einer 3D-Engine auf Windows Phone #3

Phone 8.1 AppVor einigen Wochen habe ich meinen 3D-Renderer auf Windows Phone 8.0 stabil zum Laufen bekommen und bin dabei auf die eine oder andere Hürde gestoßen. Da mittlerweile das Windows Phone 8.1 SDK verfügbar ist und auch SharpDX die entsprechenden Funktionen implementiert, konnte ich nun also einen neueren Weg ausprobieren – die Universal Apps. Vorteil: Dieser Weg verspricht, dass das Coding zwischen WinRT auf normalen Windows PCs und Windows Phone fast komplett identisch ist. Auch SharpDX verspricht, dass dieser Weg damit bereits gut funktioniert und nebenbei eine ganze Liste Nachteile der vorherigen Lösung ausbügelt. Weiterlesen

Jun 01

Performance-Optimierung #1

Test-ScenePerformance-Optimierung ist immer und überall ein Thema, welches viel Zeit und starke Nerven fordert. Zudem wird gerne an Stellen optimiert, welche für die Gesamtperformance letzten Endes nicht wirklich ausschlaggebend sind. Ich persönlich bin deswegen überwiegend der Meinung, während der Entwicklung selbst weniger auf Performance zu schauen und sich von Optimierungen nicht unnötig aufhalten zu lassen. Dort wo es hackt, kann im Nachhinein nachgebessert werden. Im Prinzip bin ich genauso bei der Entwicklung von SeeingSharp (Arbeitstitel für 3D-Engine) vorgegangen. Das Grundgerüst ist zunächst so aufgebaut, dass es aktuelle Anforderungen daran gut abdecken kann. Für künftige Aufgaben bin ich gerade dabei, an der Einen oder anderen Stelle zu schrauben, um so die nötige Leistung aus dem System zu bekommen. Die Schritte dazu und erste Ergebnisse erkläre ich kurz in diesem Beitrag. Weiterlesen

Mai 25

Laden von Texturen auch auf Windows Phone

SkyboxDirectX auf Windows Phone hat zwar zu einem großen Teil die gleiche API, wie auf dem Desktop, drum herum ist es aber z. T. stark eingeschränkt. Neben den Punkten aus den letzten Blog-Beiträgen (z. B. fehlendes Direct2D) hatte ich zusätzlich das Problem, dass ich bis jetzt fast durchweg png Dateien als Texturen verwendet habe. Grundsätzlich ja kein blöder Gedanke: Ein einfaches Dateiformat, welches man auch mit jedem Bildbearbeitungsprogramm bearbeiten und auch problemlos in eigenen Programmen verwenden kann. Auf dem Windows Phone funktioniert das aber nicht, da hierfür ausschließlich Texturen im dds Format zulässig sind. Daraus entstanden für mich im Wesentlichen zwei Probleme: Wie werden andere Dateiformate in dds konvertiert und wie können diese Dateien im Programm geladen werden? Weiterlesen

Mai 18

Portierung einer 3D-Engine auf Windows Phone #2

App-ScreenshotHeute kam ich endlich einmal dazu, die Portierung auf Windows Phone wie im letzten Post beschrieben weiter zu machen. Kurzum: Das Ergebnis sieht mittlerweile sehr gut aus. Hürden gab es neben der zuletzt genannten zum Glück keine größeren mehr. Das einzig wirklich negative ist die Tatsache, dass die Synchronisierung zwischen Xaml-Rendering und Direct3D-Inhalt am Phone (natürlich) wieder anders ist, als auf allen anderen Windows Plattformen. Ich verwende den Weg über das DrawingSurface wie hier auf Msdn beschrieben. Weiterlesen

Mai 04

Portierung einer 3D-Engine auf Windows Phone

Heute habe ich mich damit beschäftigt, eine 3D-Engine auf Windows Phone (8) zu portieren. Im Prinzip handelte es sich schon vor dieser Aktion um relativ viele Klassen, welche sauber auf Windows Desktop und WinRT laufen (auch ARM). Ich wusste zwar schon, dass die Phone-Plattform noch einmal deutlich eingeschränkter ist, als etwa die WinRT-Plattform für Tablets, das ich so viel rumbasteln muss, hätte ich aber nicht gedacht. Hier eine kurze Sammlung der Punkte, auf die ich gestoßen bin. Weiterlesen

Feb 09

Direct3D Adapter- und Output-Informationen per DXGI laden

Device-OverviewEine einfache Aufgabe, die man gerne vergisst, wenn man mit Direct3D arbeitet. Für gewöhnlich arbeitet man mit dem Adapter (=Grafikkarte), welcher als Standard am Rechner eingestellt ist. Dies ist nämlich der Fall, wenn bei allen Initialisierungs-Methoden nicht explizit angegeben wird, welcher Adapter verwendet werden soll bzw. der Standard-Adapter mit Index 0. Aber was ist, wenn mehrere Grafikkarten im Rechner stecken, über die mehrere Monitore (>2) angebunden sind? Was ist, wenn der Software-Renderer (WARP) verwendet werden soll? In diesem Beitrag beschreibe ich ein Beispielprogramm, welches per DXGI (DirectX Graphics Infrastructure) alle verfügbaren Adapter ermittelt und in einer WPF-Oberfläche einige Informationen dazu anzeigt. Weiterlesen

Jan 26

Einfacher Media Player mit C# und der Windows Media Foundation #3

Video-PlayerIn den letzten Beiträgen habe ich es schon öfters geschrieben: Die API der MediaFoundation (MF) finde ich prinzipiell überraschend einfach anzuwenden. Meine Probleme entstanden aber i. d. R. dadurch, dass der von mir verwendete Wrapper SharpDX.MediaFoundation alles andere als ausgereift ist. Aus diesem Grund habe ich in den letzten Tagen im Internet nach Alternativen gesucht – und prompt das (leider schon seit 2012 eingestellte) OpenSource Projekt MediaFoundation.Net gefunden. Die Tatsache, dass daran nicht mehr entwickelt wird, schreckt zunächst ab, aber nach einem kurzen Blick über die Klassen und Interfaces erkennt man, dass die MF-API grundsätzlich sauberer abgebildet ist. Aus diesem Grund habe ich meinen Video Player aus den letzten Blog-Einträgen genommen und auf diese Bibliothek umgestellt. Weiterlesen

Jan 19

Media Foundation Transcoding mit C#

BeispielprogrammLangsam aber sicher hangele ich mich durch die MF (Media Foundation) durch. Im Gegensatz zu dem Video Player aus den letzten beiden Posts geht es hier um eine andere Aufgabe: Dem Transcoding (Konvertieren). Mein Beispielprogramm lässt dem Benutzer eine Quell- und eine Zieldatei auswählen und eine neue Auflösung für das Video einstellen. Nach Klick auf „Transcode!“ wird das Video entsprechend konvertiert und in die neue Zieldatei geschrieben. Rein von der MF-API her ist diese Aufgabe relativ einfach zu lösen, wie aber bei meinen letzten Posts lag die Schwierigkeit auch hier eher bei der Brücke zwischen C# und MF-API. Die Stolpersteine hier waren allerdings noch etwas größer und zeitaufwändiger. Weiterlesen

Jan 12

Triangulation von WPF-Path Objekten

WPF Path TriangulatorZugegeben, der Titel dieses Beitrags hört sich etwas komisch an. Was Besseres ist mir aber leider nicht eingefallen. Im Grunde habe ich mir folgendes in den Kopf gesetzt: Ich möchte in meinem Programm diverse 3D-Objekte wie Pfeile, Böden (nicht nur rein rechteckige) o. Ä. relativ einfach dynamisch erzeugen können. Eigentlich habe ich etwas Ähnliches im Kopf, wie ich hier mit Text-Objekten gemacht habe – nur mit anderen Formen. Die Path-Objekte aus WPF bieten mir dafür schon die Grundlage, die ich brauche, nur leider lediglich in 2D. Daher habe ich ein kleines Programm geschrieben, welches aus einen Path per Triangulation-Algorithmus ein Modell aus Dreiecken errechnen kann. Daraus im Anschluss ein wirkliches 3D-Objekt zu machen, ist bekanntlich kein großes Problem mehr. Weiterlesen