Archiv für die Kategorie ‘Engine’

FaceLabs-Demo

Sonntag, 02. November 2008

So Freunde, es ist soweit: Hier ist der erste Download für euch! Es handelt sich dabei um eine kleine FaceLabs-Demo bei der man ein kleines Fenster zu sehen bekommt, in dem man ein paar Visualisierungseinstellungen vornehmen kann.

Wer Bock hat, kann auch gerne ein bisschen an den ini- und tga-Dateien rumspielen, um das Design zu individualisieren. Falls es dabei Unklarheiten gibt, beantworte ich natürlich gerne entsprechende Fragen. Ihr dürft mir auch gerne eure eigenen Entwürfe schicken. Vielleicht schafft es ja ein Design oder Teile davon bis ins Spiel.

Beim Start der exe-Datei wird eine html-Datei erzeugt, die ggf. ein paar Fehlermeldungen enthält. Das Programm benötigt auf jeden Fall DirectX 9 und ein Windows-NT-Betriebssystem (vielleicht funzt auch ME oder so, aber das konnte ich bisher nie testen). Falls das Programm bei der Ausführung zu Problemen führt, sollten in der html-Datei Fehlermeldungen auftauchen, die mich in Kombination mit euren Systeminfos interessieren würden. Falls das kleine Programm problemlos ausgeführt werden kann, sollte etwas zu sehen sein, was ungefähr dem folgenden Screenshot entspricht (abgesehen von schwarzem Hintergrund und ein bisschen Text, was nicht im Screenshot enthalten ist):

(Der Info-Button hat bisher übrigens keinerlei Funktion.)

Zwischenmeldung

Donnerstag, 02. Oktober 2008

Es ist ja schon ein wenig was her, dass ich das letzte Mal hier was von mir gegeben habe. Das soll so ja nicht weitergehen. Nur habe ich im Moment nix Besonderes, was ich zeigen könnte. Gut, dass 3D-Modell von Elsa könnte ich langsam mal an die Sonne kloppen, aber ich bin jetzt gerade bei meinen Eltern und hätte nur über Umwege Zugriff auf das Modell.

Was ich aber ganz wunderbar machen kann, ist, einfach etwas zu berichten, womit ich mich gerade so beschäftige:

Während die Grafik- und die Eingabekomponente bereits funktionieren (über Direct3D bzw. DirectInput), wird von der Engine bisher noch keinerlei Wiedergabe von Sounds unterstützt. Darum kümmere ich mich aber gerade. Wave-Dateien können bereits geladen werden, um die DirectSound-Buffer zu füllen. Jedoch ist noch kein Abspielen möglich, weil das nicht ganz trivial ist. Naja, wenn der DirectSound-Buffer einmal gefüllt ist, stellt ein einfaches Abspielen keine große Herausforderung dar. Jedoch müssen größere Sounds “gestreamt” werden, d.h., sie befinden sich im regulären Arbeitsspeicher und werden nur häppchenweise in die Sound-Hardware geschoben. Immer nur die Portionen, die wirklich gerade abgespielt werden. Oder aber ein Sound muss dubliziert werden, weil er mehrmals parallel ertönen soll (z.B. wie beim lustigen Knattern einer Maschinengewehrsalve). Von zusätzlichen Effekten habe ich noch gar nicht gesprochen, aber da bin ich mir auch noch nicht sicher, was es alles geben wird. Nicht, dass jemand jetzt denkt, die DirectSound-Komponente wäre ein komplexeres Baby als die Direct3D-Komponente zur Grafikdarstellung etc. Aber das ist ja auch kein Vergleich.

Sobald die Sounds letztlich abgespielt werden können, werde ich die FaceLabs (das Modul für die grafische Benutzeroberfläche) weitestgehend fertigstellen. Wenn es soweit ist, werde ich eine kleine Demo schreiben, die ich dann zum Download bereitstelle. Das wird nix Wildes sein. Nix, was mit dem eigentlichen Spiel zu tun hätte. Sondern einfach nur ne kleine Demo des FaceLabs-Moduls. Aber da könnt ihr euch dann schon mal auf den ersten Download von dieser Seite freuen, hihihi.

Bezüglich des FaceLabs-Moduls bin ich mir aber noch nicht sicher, wie ich die Individualisierung der optischen Darstellung der Fenster und Steuerelemente etc. realisieren werde. Ich hatte zunächst an eine XML-Datei gedacht, in der die Farben zum Mischen und Koordinaten sowie Dateinamen der Texturen und Sounds etc. vermerkt sind, jedoch bockt mich das mittlerweile nicht mehr so an. Ich würde lieber alles in einer Binärdatei haben, also Sounds, Grafik, sonstige Daten wie Farben und Koordinaten und so alles in einer “Paketdatei”. Dafür ist dann natürlich eine Art Editor nötig, um so ein Bündel zu einer Datei zusammenzuführen. So ein Editor bedeutet wieder mehr Aufwand. Aber ich fänds halt einfach schöner.

Kritik, Vorschläge und Ideen oder auch Wünsche sind sehr willkommen.

Naja, mal sehen. Ich bin selbst gespannt! Bis die Tage.

Kleine BodyLabs-Demo

Donnerstag, 31. Juli 2008

Ich habe jetzt mal ein klitzekleines Video “gedreht”, in dem die Physikengine BodyLabs zum Einsatz kommt. Ich habe es auf die Schnelle erstellt; die Qualität ist nicht die beste. Zu meinem Pech führt das dazu, dass einige Stellen nicht ganz sauber und korrekt rüberkommen. Ziemlich in der Mitte des Videos flippt der Würfel am rechten Rand recht eigenartig rum. Ich sollte möglichst bald ein besseres Video erstellen, damit ihr seht, dass das wirklich nur am Video liegt, denn eigentlich sind die Berechnungen sehr überzeugend.

Get the Flash Player to see the wordTube Media Player.

Zu Testzwecken habe ich mir eine OpenGL-Anwendung erstellt, um die Objekte zu visualisieren. Die bunten Quader und Kugeln in dem Video entsprechen natürlich nicht den Objekten im Spiel. Die OpenGL-Anwendung ist nur zum Testen der Physikengine, die sich bisher übrigens auf 2D-Objekte beschränkt. Es werden zwar 3D-Objekte dargestellt, die Berechnung findet aber nicht auf Quadern und Kugeln, sondern auf Rechtecken und Kreisen statt.

Der Builder

Montag, 28. Juli 2008

So, der Builder ist fertig. Eigentlich schon seit ein paar Tagen, aber ich hatte bisher keine gute Gelegenheit, darüber zu berichten. Viel zu sagen gibt es da eigentlich auch gar nicht. Wie erwartet gab es keine Probleme. Das war ein Klacks. Ist aber auch nicht verwunderlich, schließlich muss für die Bytecode-Generierung, was ja Aufgabe des Builders ist, lediglich der zuvor erzeugte Syntaxbaum traversiert werden. Dabei wird für jeden Knoten im Baum der entsprechende Bytecode in einen Puffer geschrieben. Der Code eines einzelnen Knotens ist dabei absolut unabhängig von anderen Knoten, was die ganze Sache schön einfach hält.

Der tatsächliche Bytecode ist jetzt wahrscheinlich weniger interessant. Selbst für mich macht es wohl erst Sinn, mir den generierten Bytecode reinzuziehen, wenn ich den Interpreter baue. Daher gibt der Builder bisher einfach nur die Opcode-Kürzel der jeweiligen Instruktionen aus. Diese Debug-Ausgaben passen im vorliegenden Fall ganz wunderbar zum Syntaxbaum von letzter Woche. Das ist auch gut so, schließlich repräsentieren die Opcode-Kürzel dort links denselben Skriptcode zur Berechnung der Quadratwurzel, für den der Syntaxbaum erzeugt wurde.

Hier noch mal der beispielhafte Skriptcode:

z := 1;
while ( abs( z*z - x ) >= mu )
{
  z := z - ( z*z - x ) / 2*z;
}

Syntaxbaum

Donnerstag, 24. Juli 2008

Der Parser des Scripting-Systems ist schon fertig. Das ging schnell und hat weniger Probleme bereitet, als ich zunächst befürchtet hatte. Ok, ich hatte zwar vorher schon mal einen Parser geschrieben, jedoch hat der lediglich Klammerausdrücke analysiert. Nichts Wildes. Die dabei gesammelten Erfahrungen haben mir jetzt eigentlich nicht geholfen. Umso überraschter bin ich.

Der Parser analysiert den Skriptcode und baut einen so genannten Syntaxbaum auf. Auf Basis dieses Syntaxbaums soll dann der Bytecode generiert werden, der letztlich zur Laufzeit ausgeführt wird. Bisher ist aber nur der Parser fertig. Der Builder und der Interpreter müssen noch programmiert werden. Das mache ich als nächstes. Aber der Parser funktioniert schon hervorragend. Das möchte ich kurz an einem Beispiel demonstrieren.

z := 1;
while ( abs( z*z - x ) >= mu )
{
  z := z - ( z*z - x ) / 2*z;
}

Der oben stehende Skriptcode zur Berechnung der Quadratwurzel wird vom Parser korrekt zerlegt und in einen Syntaxbaum transformiert. Die vielleicht etwas unübersichtliche Visualisierung des Syntaxbaums müsst Ihr mir verzeihen, aber das ist ein Ausschnitt aus dem Log-Text der Engine. Es handelt sich dabei um Debug-Ausgaben des Parsers. Ich habe also nicht gemogelt, um es schöner aussehen zu lassen, sondern das ist tatsächlich das, was der Parser im Hintergrund anstellt und entsprechend ausgibt. Ein kleiner Beweis, dass es zumindest für das vorliegende Beispiel funktioniert.

Schön zu sehen ist vor allem, dass die Punkt-vor-Strich-Rechnung korrekt umgesetzt wird, aber nur sofern durch Klammersetzung nichts anderes “befohlen” wird. Die räumliche Trennung einiger Teilausdrücke und so dienen lediglich der Übersicht, denn Leerzeichen etc. werden schon vor dem Parser von einem Präprozessor weggewixt.

Ich denke, den Builder zu programmieren, wird kein großes Problem sein. Mehr “Angst” habe ich da schon vor dem Interpreter, der die einzelnen Laufzeitumgebungen verwalten muss etc. Mal sehen…

Grammatik der Skriptsprache

Sonntag, 20. Juli 2008

Obwohl das Wochenende noch deutlich merkbar in meinem Körper wohnt, habe ich nun angefangen, das Scripting-System der Engine zu programmieren. Hierfür hatte ich am Freitagabend bereits die zugrunde liegende Grammatik skizziert, die ich heute noch ein wenig korrigiert habe. Und das alles, obwohl mein Freund Tamer heute Geburtstag hat, den zu besuchen ich zu schwach bin. Aber Proggen und vergleichbares Zeug geht bei mir immer. Das findet Tamer genauso geil, das weiß ich.

Grammatik

Während ich die Grammatik beim Fernsehkucken auf einen Zettel geschmiert habe, hat mich meine Freundin Anna gefragt, ob ich denn an einem Freitagabend da wohl Bock drauf hätte. “Auch nicht weniger als sonst.”, war meine Antwort. “Also hast du tierisch Bock drauf!”, schloss Anna daraus. Geil! Naja, in Wirklichkeit gibt es natürlich Besseres, womit ich mich beschäftigen kann, vor allem an einem Freitagabend. Mal abgesehen davon, dass ich mir gar nicht sicher bin, ob die Grammatik so optimal ist. Insbesondere, weil bisher nur Fließkommawerte unterstützt werden. Integers und Strings werden bisher nicht unterstützt. Sie sind aber eigentlich ganz nützlich, insofern werde ich sie wahrscheinlich doch noch einbauen. Mal sehen. Ich glaube aber, dass ich das problemlos nachträglich noch machen kann. Ich baue von vornherein die Komponenten des Scripting-Systems entsprechend generisch auf.

Grober Umriss der Engine

Donnerstag, 19. Juni 2008

Ich habe nun eine neue Seite gebaut, auf der die Engine ganz grob umrissen wird. Es werden die fünf wesentlichen Module der Engine und deren jeweilige Funktionalität vorgestellt. Schon bald gibts mehr.