Länger nichts mehr zum Projekt geschrieben und das hat auch einen Grund, eigentlich sogar zwei...
Erstmal musste ich meinen Rechner neu aufsetzen, was knapp 2 Tage gedauert hat. Windows 7, Service Packs, SDKs, Entwicklungsumgebungen, Service Packs für Entwicklungsumgebungen, Treiber... Da kommt schnell was zusammen... Leider ist dabei erstmal die
Windows 8 Installation auf der Strecke geblieben

Zum anderen habe ich aber auch damit begonnen den Prototype, den ich in
XNA entwickelt habe nun nach
DirectX und
C++ zu überführen. Das ist im Grunde genommen nicht weiter schwierig, da ich ja noch keine Rocket Science verwende. Hier und da gibt es aber ein paar Stolpersteine. Eines davon ist das Format der Assets, insbesondere der 3D-Modelle. Hier habe ich eine Menge Grundlagen geschaffen. Ich importiere ein 3D-Modell, welches ich aus Blender exportiert habe in ein eigenes C#-Programm. Dieses bedient sich entweder Assimp für alle unterstützten Formate, oder aber dem ModelImporter von
XNA. Die 3D-Daten werden in den Speicher eingelesen und ein wenig aufgearbeitet und untersucht. Daraufhin schreibe ich die Daten in ein eigenes Binärformat mit minimalem Overhead. Dieses ist daraufhin optimiert, daß es möglichst schnell gelesen werden kann und möglichst wenig Platz benötigt, ohne es jetzt übermäßig kompliziert zu machen (sprich: Es gibt aktuell noch keine Kompression). Das Schreiben erfolgt dabei noch von C# aus. Sinn dahinter ist, daß ich so später leichter eine nette
GUI dafür machen kann, wenn es denn notwendig ist.
Auf
C++-Seite habe ich einen Reader für das Binärformat erstellt. Dieses wird in den Speicher geladen und die entsprechenden Buffer werden erzeugt (Index- und
Vertex-Buffer, Texturen sind noch offen) und zur Grafikkarte geladen. Entstanden ist daraus eine kleine
Mesh-Klasse die so ähnlich funktioniert wie die Model-Klasse von
XNA.
Aktuell werden noch keine Animationen unterstützt. Das Format ist aber schon relativ flexibel und man kann mit beliebigen Strukturen umgehen, egal wieviele Positionen, Farben, Normalen, Tangenten, Binormale und UV-Koordinaten in der Datei vorhanden sind: Diese werden geladen und für
DirectX aufbereitet.
An dieser Baustelle habe ich jetzt aber erstmal genug gearbeitet, da alles soweit funktioniert, wie ich es mir vorstelle. Animationen spare ich mir für später auf, wenn ich diese benötige und ein flexibleres Laden (Stichwort Streams und Virtuelle Filesysteme) sind auch erstmal nicht ganz so wichtig.
Nächster Schritt ist eine Effektklasse, die so ähnlich funktioniert, wie die aus
XNA, allerdings etwas flexibler und moderner (Stichwort Geometrie-
Shader und Tesselation). Darauf werde ich dann ein Materialsystem aufbauen und dann habe ich auch schon fast den
XNA-Stand vom Dungeon erreicht
