20 September 2015

Worklog RK Rocket #2: Maus, Tastatur, Gamepad

Inputs bei RK RocketFür RK Rocket habe ich damit begonnen, das Eingabe-System von Seeing# vernünftig auszuprogrammieren. Eingabesystem bedeutet in diesem Fall, dass Seeing# im Hintergrund automatisch die Status-Werte der angebundenen Eingabegeräte unabhängig von der aktuellen Oberflächen-Technologie (WPF, Win.Forms, WinRT) abfragt, in ein gemeinsames Format bring und dann an die aktuellen Spiele-Komponenten weiterleitet. Das klingt erst einmal einfach, ist aber nicht ganz zu unterschätzen. Probleme kommen etwa daher, weil auch jede Oberflächen-Technologie in Windows seine API ein bisschen anders bereitstellt. Weiterhin macht die Architektur von Seeing# selbst die Aufgabe nicht einfacher, da konsequent auf Multithreading, Multi-View und theoretisch auch mehrere Szenen gesetzt wird. Weiterlesen

13 September 2015

Worklog RK Rocket #1: Basics

Scrreenshot von RK RocketAktuell arbeite ich relativ viel an der Integration von Direct2D in Seeing#. Diese API ist für mich der interessanteste Weg, 2D-Funktionen in eine auf Direct3D basierende 3D-Engine zu bringen. Man arbeitet mit aus anderen APIs bekannten einfachen Funktionen wie DrawRect, DrawLine oder DrawBitmap, ist aber vollständig hardwarebeschleunigt unterwegs und man kann direkt auf Texturen zeichnen, welche auf ein 3D-Objekt geklatscht werden. Oder schlich in den Vorder- bzw. Hintergrund der 3D-Ansicht. RK Rocket ist ein kleines Spiel, anhand dem ich die 2D-Funktionen in Seeing# integriere und direkt teste. Es ist ein einfaches kleines Game, inspiriert vom Rockout-Beispiel der Programmiersprache BlitzMax [1]. Es wird als UWP App erstellt und ist somit auf möglichst allen Windows 10 Geräten lauffähig. Weiterlesen

2 August 2015

Seeing# auf Windows 10

Seeing# Sample ContainerIn den letzten Tagen habe ich meinem PC und Tablet auf Windows 10 geupdated. Um mir einen gewissen Überblick aus Sicht der Softwareentwicklung zu machen, war ich letzten Donnerstag bei der .Net Usergroup Nürnberg, wo einige der neuen Möglichkeiten durch Daniel Meixner und Marco Richardson vorgestellt wurden [1]. Seit heute früh spiele ich entsprechend stärker mit Visual Studio rum und versuche, den SampleContainer von Seeing# für die neue „Universal Windows“ Plattform zu erstellen. Universal Windows ist hierbei sehr ähnlich den Universal-Projekten von Windows 8 / 8.1, allerdings handelt es sich jetzt nicht mehr um mehrere C#-Projekte mit einem Shared Project, sondern nur noch um ein einziges C#-Projekt, welches dann auf allen Windows Plattformen läuft – das wären dann XBox, IoC, Phone, Tablet, PC und der Surface Hub. Weiterlesen

26 Juli 2015

Seeing#, C# 4.6 und SIMD

ProzessorSeit dem Release von .Net 4.6 am 20 Juli ist neben vielen anderen neuen Features auch der neue 64-Bit Jit Compiler RyuJIT und damit neue SIMD-Befehle (Single Instruction Multiple Data) verfügbar. Einige offizielle Infos dazu finden sich z. B. auf dem .Net Blog unter den Punkten RyuJIT und SIMD [1]. Was versteckt sich nun konkret hinter dem Stichwort SIMD bei .Net? Es handelt sich um den Namensraum System.Numerics [2]. Die darin enthaltenen Strukturen ähneln dem Vector3, Vector2, der Matrix4x4 und weiteren Strukturen, wie man sie auch in SharpDX, SlimDX oder bei mir in Seeing# wiederfindet. Der Unterschied ist, dass bei den verschiedenen Methoden – falls verfügbar – speziell optimierte Prozessorfunktionen angesprochen werden und diese damit entsprechend schneller ausgeführt werden. Weiterlesen

13 Juli 2015

Ein Sommerloch, RKVideoMemory, SmartGlasses und Seeing#

Recon-Jet-Black-Left-AngleMein letzter Beitrag hier ist jetzt eine ganze Zeit lang her… ich betrachte das einmal ein kleines Sommerloch. Hohe Temperaturen, eine Hochzeit in der Verwandtschaft und die Urlaubszeit haben meine Aktivitäten hier stetig verhindert. In den letzten Beiträgen habe ich mich relativ viel mit Video-Verarbeitung mit der Media Foundation beschäftigt. Dies lag unter anderen an dem Spiel RKVideoMemory, welches ich für oben genannte Hochzeit als kleines Geschenk programmiert habe. Quasi ein Memory, welches alte und neue Bilder des Ehepaars als Spielkarten verwendet und beim Aufdecken das Ein oder Andere peinliche Video abspielt. Gespielt wurde dann am Tablet und angezeigt am 46″ Fernseher. War am Ende seine sehr witzige Geschichte… aber jetzt wird es wieder Zeit für andere Themen. Eines davon sieht man hier links im Titelbild: SmartGlasses. Weiterlesen

10 Mai 2015

Direct2D-Integration in Seeing#

Direct2D SampleHeute früh habe ich mir ein paar Videos von der diesjährigen Build angesehen und bin dabei auf den Talk „Introducing Win2D“ gestoßen [1]. Über diese API habe ich zwar schon vorher gelesen, habe sie mir bis jetzt aber noch nicht tiefer angeschaut, da ich Direct2D normalerweise per SharpDX direkt von C# aus verwende. Grundsätzlich finde ich es aber sehr gut, dass Microsoft selbst an einen Weg arbeitet, die Direct2D-API über Win2D auch für C#/.Net Entwickler verfügbar zu machen. Die Performance ist super und die API der von System.Drawing sehr ähnlich. Einzig die Tatsache, dass Win2D für Universal Apps ausgelegt ist, finde ich etwas schade. In Seeing# etwa binde ich auch Direct2D ein, mache das dann aber auch für Desktop-Plattformen, also Win.Forms, WPF und Universal/WinRT. Schnelles hardwarebeschleunigtes 2D-Rendering ist schließlich auch bei Desktop-Programmen interessant. Weiterlesen

2 Mai 2015

Logikbausteine in Seeing#

Neulich habe ich darüber geschrieben, wie Seeing# das Messenger-Pattern implementiert. Im Rahmen eines kleinen Memory-Spiels habe ich die letzten Tage damit einige kleine Logig-Komponenten umgesetzt, an denen das Pattern relativ gut funktioniert. In diesem Artikel geht es beispielsweise um eine Komponente, welche sich um das Aufdecken von Karten und das Erkennen von richtigen oder falschen Paaren kümmert und darauf entsprechend die Karten wieder verdeckt oder eine Folgelogik wie z. B. „Punktzahl hochzählen“ antriggert. Der Screenshot links gibt schon mal eine grobe Übersicht über die hier eingesetzten Klassen. Weiterlesen

28 April 2015

FrozenSky umbenannt in Seeing#

RenameAm letzten Wochenende habe ich mein OpenSource-Projekt FrozenSky umbenannt in Seeing#. Der Grund ist schlicht der, dass der Begriff FrozenSky im Prinzip gar nichts mit der Sache zu tun hat, welche sich hinter dem Projekt verbirgt. Es geht um ein Multimedia-Toolkit für C# mit Schwerpunkt auf 2D- und 3D-Grafiken. Ich wollte einen Namen haben, der entsprechend besser zu diesem Thema passt. Nach etwas Überlegung ist mir dann die Variante „Seeing#“ eingefallen. Passt denke ich ganz gut, das # (gesprochen „Sharp“) zeigt am ersten Blick, dass es sich um eine Technologie für .Net / C# handelt. Das „Seeing“ soll verdeutlichen, dass es um das Sehen geht. Zwar sehr allgemein, ich denke aber, es passt trotzdem relativ gut. Anfangs war ich nicht ganz sicher, wie viel Aufwand mir ein solcher Namenswechsel macht – wirkt er sich doch auf die Homepage, auf GitHub und auf das Coding selbst massiv aus. Am Ende war es aber an einen Vormittag nebenbei gut fertig zu machen.

19 März 2015

Einstiegs-Tutorial für Seeing#

SeeingSharp TutorialSeitdem ich den Code auf Github hochgeladen habe, bastle ich daran auch relativ viel rum. Ziel ist für mich aktuell, nicht nur einen Haufen Quellcode-Dateien auf Github zu haben, stattdessen sollen auch einige Einstiegshilfen und Wiki-Einträge verfügbar sein, dass sich andere Interessenten möglichst einfach einarbeiten können. Der erste Schritt zu diesem Ziel ist ein kleines Einstiegstutorial bestehend aus vier C#-Projekten, jeweils angelegt als Windows Store Apps. Warum jetzt genau Windows Store war für mich erst einmal Nebensache, wichtig und für alle Plattformen gleich ist der Aufbau der Szene, die Konfiguration der Kamera, die Definition von Animationen oder die Suche nach Objekten unterhalb des Maus-Cursors. Weiterlesen

8 März 2015

3D-Engine Seeing# goes OpenSource #2

Pallet-Sample-SmallEndlich erledigt, heute früh habe ich Seeing# zusammen mit dem Quellcode von RK 2048 auf GitHub unter diesem Link hochgeladen [1]. Wie im letzten Post geschrieben, steht der Code unter GPLv3 und kann somit von jedem frei eingesehen, verwendet und modifiziert werden, sofern man sich an die Bedingungen der GPL hält. Für mich soll die Library in Zukunft als Basis für weitere Hobby-Entwicklungen, meine Vorträge/Artikel und für Posts auf dieser Homepage dienen. Weiterlesen