Ein Thema, was mich zurzeit sehr beschäftigt, ist der korrekte Umgang mit dem ConstantBuffer in Direct3D 11. Der Constant Buffer wird dafür verwendet, um einem Shader fixe Parameter zu übergeben. Diese Parameter sind bei Mosaic Snake 3D etwa die aktuelle Transformation, die Lichtfarbe, die Lichtstärke und noch ein paar andere. Der Ansatz, neue Werte in den ConstantBuffer zu schreiben, ist bei Mosaic Snake 3D dabei relativ primitiv: Es gibt einen CosntantBuffer über das gesamte Programm. Jedes Mal, wenn ein Objekt (z. B. ein Teil der Schlange) gezeichnet wird, wird der ConstantBuffer vorher mit den aktuellen Informationen überschrieben und danach wird gerendert. Bei diesem Spiel hat der Ansatz auch sehr gut funktioniert, allerdings ergeben Tests in einem anderen Szenario ein ganz anderes Bild…
Blog
RK Mosaic Snake 3D ist jetzt im Windows Store!
Es hat jetzt eine ganze Weile gedauert, aber schließlich hat es doch noch geklappt. Das Spiel hat die Tests bei Microsoft überstanden und ist jetzt unter folgender Adresse im Windows Store erhältlich: http://apps.microsoft.com/… Was es alles für Probleme gab, kann man z. T. auf meinem Post bei www.indiedev.de nachlesen. Davor gab es aber auch noch eine … Weiterlesen …
Inhalt der RenderTarget-Textur in ein Bitmap kopieren
Im Moment beschäftige ich mich damit, ein kleines Unittest ähnliches Tool für eine 3D-Engine zu schreiben. Funktionsweise ist relativ einfach: Es wird eine Textur angelegt, in die ganz normal gerendert werden kann. Nach Abschluss des Render-Vorgangs soll der Inhalt der Textur in den Hauptspeicher, z. B. als normale Bitmap geladen werden (ob jetzt WPF oder System.Drawing ist egal..). Dieses entstandene Bild kann man jetzt nutzen, um zu prüfen, ob diverse Render-Schritte korrekt funktioniert haben. So weit, so gut, dass soll dann gar nicht weiter Teil dieses Beitrags sein. Mit was ich mich hier beschäftigen will, ist der Weg, wie man den Inhalt einer Textur von der Grafikkarte in den Hauptspeicher bekommt.
Bessere PropertyGrids in Wpf durch PropertyTools
Das klassische PropertyGrid kennt wohl jeder Entwickler. Bekannt durch das „Properties“-Fenster in VisualStudio oder einfach als sehr produktives Control in Windows.Forms, um schnell eine Benutzeroberfläche für eigene Objekte erzeugen zu lassen. Daneben gibt es ein ähnliches Control in den meisten Control-Frameworks, welche man dazukaufen kann (z. B. von DevExpress). Neulich bin ich auf ein OpenSource-Projekt auf Codeplex gestoßen, welches in meinen Augen die eine oder andere Sache besser und hübscher macht.
Initialisieren von Direct3D und mehrere Grafikkarten in einem PC
Messezeit ist fürs erste rum, die meisten der Prüfungen sind geschrieben. Jetzt wird es Zeit, hier wieder einige Themen zu diskutieren. Neulich stand ich wieder vor der Frage, wie man bei einer „frischen“ 3D-Engine Direct3D initialisiert bzw. ganz allgemein die Device-Instanzen verwaltet. Mittlerweile ist die API zwar einfacher, das Thema meiner Meinung nach aber komplexer geworden. Hat man ein Windows.Forms Control als Render-Ziel, so hat man i. d. R. keine großen Probleme. Steckt man aber etwa in einem Szenario, in welchen man 3D-Grafik eines Direct3D 11 Renderers in WPF einbinden möchte, so muss man schon Ressourcen von Direct3D 9 und Direct3D 11 verwenden, da WPF selbst nur Ressourcen von Direct3D 9 einbinden kann. Will man jetzt noch per Direct2D direkt auf Texturen zeichnen, so sind – aber auch nur auf der Windows 7 Plattform – zusätzlich Ressourcen von Direct3D 10 notwendig.
Verbesserungen an Mosaic Snake 3D
Es ist jetzt ca. einen Monat her seit meinem letzten Blog-Eintrag. Man merkt es, dass ich momentan seitens des Studiums mitten in der Prüfungszeit und seitens der Arbeit mitten in der alljährlichen Messezeit stecke. Aber nichts desto trotz will ich die Osterfeiertage nutzen, um auch hier ein Lebenszeichen von mir zu geben. Über die letzten Wochen habe ich wieder häufiger an Mosaic Snake 3D weiter gearbeitet. So habe ich damit begonnen, mehrere Dialog-Oberflächen einzubauen, die über die 3D-Grafik gezeichnet werden. Daneben habe ich die Farbgestaltung angepasst und die 3D-Engine beherrscht jetzt auch einfache Transparenz-Effekte.