Projekte

Auf dieser Seite möchte ich Dich an meinen Projekten teilhaben lassen. Sobald es etwas Neues gibt, das ich veröffentlichen möchte, wirst Du es hier finden.

Flash

Plasma - Fraktal    Schnee    Lupe     Welle

Silverlight

Silverlight gibt es ähnlich wie Flash als Browser - Plugin für die Betriebssysteme Windows und OS X. In der Linux - Umgebung wird Moonlight verwendet, welches nicht ganz auf dem aktuellen Stand von Silverlight ist. Bei Flash wird als Programmiersprache ActionScript und bei Silverlight zum Beispiel C# verwendet. Der C# - Interpreter ist nach meiner Einschätzung wesentlich schneller als der ActionScript - Interpreter. Daher entschloß ich mich, einige Zeit mit Silverlight zu arbeiten. Hierbei stellte ich fest, daß es in Silverlight bestimmte Effekte wie zum Beispiel Perlin noise oder Simplex noise nicht gibt. Diese kann man aber selbst programmieren und dennoch laufen die Programme flüssig.
Basierend auf Silverlights "shader effects" habe ich Perlin noise und andere Effekte mit dem kostenlosen Tool Visual Web Developer 2010 Express und Silverlight 4 implementiert und hierzu einige Beispiel - Anwendungen geschrieben, für die es hier den Quellcode gibt:

Perlin noise animations    Perlin noise sphere    Voxel Spacing (front view)    Voxel Spacing (top view)

Als Inspiration für meine Anwendungen nutzte ich Ken Perlin's Präsentation "Making Noise" und als Vorlage für die Shader - Programmierung die Implementierungen von Stefan Gustavson. Empfehlenswert ist auch diese Seite.

Java

Die nachfolgenden Programme können gestartet werden, indem Du mit der Maus auf das entsprechende Bild klickst. Als Voraussetzung muß Java (http://www.java.com) installiert sein. Zusätzlich sollte meine Seite http://www.lichtundliebe.info bei den Java-Einstellungen als sichere Seite aufgeführt sein (in Windows Systemsteuerung->Java->Sicherheit->Siteliste bearbeiten und meine Seite hinzufügen, falls noch nicht vorhanden).

Mouse-Cube-Programm  
3D-Würfel

Ich habe mich entschlossen, tiefer in die 3D-Programmierung einzusteigen, da ich in Flash auch im 2D - Bereich schnell an meine Grenzen gestoßen bin. Ich programmiere gerne in Java und so bin ich nach einiger Recherche zur jMonkeyEngine (jME) gelangt. Diese 3D-Engine verfügt über eine objektorientierte Szenenmodellierung, man kann Modelle von Blender, einem 3D-Modellierungsprogramm, einfügen und sie basiert ursprünglich auf OpenGL. Nach den Angaben des jME-Forums scheint sie auch schneller als die anderen Engines zu sein. Mit OpenGL durfte ich schon während meiner Studienzeit in C++ programmieren. Da die Programme jedoch immer komplexer werden und es auf Übersichtlichkeit ankommt, bevorzuge ich Java. Zudem ist dadurch die Ausführbarkeit auf allen gegenwärtigen Betriebssystemen gewährleistet.

Um meine Projekte ausführen zu können, solltest Du mindestens das JRE 1.5 und einen Grafikkartentreiber, der OpenGL unterstützt, installiert haben. Wenn Du mein Programm starten möchtest, brauchst Du nur links auf das Bild zu klicken. Es handelt sich hierbei um einen Würfel mit Zufallsfarben, der mit der geklickten Maus (Linksklick) "rotiert" werden kann. In Wirklichkeit bewegt sich jedoch eine Kamera auf einer Kugelbahn um den Würfel und der Würfel an sich bewegt sich nicht. Dieses Verfahren nennt man "virtual trackball". Beim Programmstart sieht man diesen Würfel erstmal nur von vorne. Mit den Tasten "+" und "-" nähert oder entfernt man sich von ihm.

Hier kannst Du meinen Quellcode herunterladen, den ich mit mit Eclipse erstellt habe. Dort erfährst Du, wie Du die jME- Bibliotheken hinzufügen kannst, wenn Du mein Programm in dieser Umgebung zum Laufen bringen möchtest.

 

 

2D-Fraktal

Weil viele Fehler von jME 1.0 nach jME 2.0 beseitigt wurden und jME 2.0 mehrere von mir benötigte Features unterstützt, habe ich das obige Programm für jME 2.0 umgeschrieben.

In diesem Programm arbeite ich zum ersten Mal mit GLSL. Das ist eine Programmiersprache, mit der man den Grafikprozessor programmieren kann und somit Programme unter bestimmten Voraussetzungen wesentlich schneller als auf dem Computerprozessor ausführen kann. Auf ein Programm, das ich auf diese Weise mit GLSL und jME geschrieben habe, verweist die rechte Grafik. Es handelt sich hier um ein Mandelbrot- und Julia-Fraktal, das vom Grafikprozessor berechnet wird. Fraktale sind geometrische Figuren, die in sich selbstähnlich sind. Mehr zu Fraktalen wirst Du auch sicher im Internet finden.

Zu meinem Programm: Du benötigst zur Ausführung mindestens OpenGL 2.0 und das ShaderModel 3.0. Du kannst Dir aussuchen, ob Du ein Julia- oder Mandelbrot-Fraktal sehen möchtest. Beim Julia-Fraktal kannst Du noch cr und ci einstellen. Klickst Du auf das Bild, kannst Du an entsprechender Stelle hineinzoomen und mit der Leertaste wieder herauszoomen. Beim Klick auf "Reset" bist Du wieder bei der Startposition. Beim Hineinzoomen erhöht sich nach einer fiktiven Formel die Iterationszahl. Wenn "Adjust Iterations" deaktiviert ist, kannst Du die Anzahl der Iterationen manuell eingeben. Da die Zahlen im Grafikprozessor keine große Genauigkeit besitzen, siehst Du auf der Titelleiste, daß das Programm bei einem bestimmten Zoom vom Speed mode in den Precision Mode schaltet. In Letzterem verwende ich eine Langzahl-Arithmetik, bei der sich eine Zahl mit einer Größe von 80 Bits aus 8 Komponenten à 10 Bits zusammensetzt. Die erste Komponente stellt dabei die Zahl vor dem Komma und der Rest die Zahl nach dem Komma dar. Eine Float-Zahl des Grafikprozessors hat eine Mantisse von 23 Bit, von denen 10 Bit zur Darstellung der Ziffer und der Rest für den Übertrag bei der Addition oder Multiplikation verwendet werden. Das bedeutet im Precision mode eine höhere Rechengenauigkeit, aber auch eine geringere Darstellungsgeschwindigkeit.

Im Precision mode habe ich bei NVIDIA-Karten Probleme bei der Darstellung bemerkt, die ich bisher nicht beheben konnte. Bei ATI-Karten läuft jedoch alles einwandfrei. Im Speed mode wird auf allen Shader-Modell-3.0.-Karten das Fraktal korrekt angezeigt. Im Vollbildmodus sollte Deine Grafikkarte mindestens 256 MB RAM haben. Für die Größe 640x480 Pixel beim Programmstart genügen 64 MB.

Den Quelltext gibt's hier.

Um leichter die Bedienung dieses Programms zu verstehen und weil noch nicht jede Grafikkarte über das ShaderModel 3.0 verfügt, kannst Du Dir hier ein entsprechendes Video (ungefähr 8 MB) herunterladen oder auf Youtube ansehen. Diesen Film habe ich mit CamStudio erstellt.

  Fractal2D

 

 

Quaternion Julia  
Julia 3D

Mit diesem Programm kannst Du in Echtzeit 3D-Julia-Fraktale erstellen lassen, die auf Quaternionen basieren. Deine Grafikkarte muss mindestens das Shader Model 3.0 unterstützen. Wenn wenn man Epsilon oder Maximum step size jedoch zu weit heruntersetzt, könnte der Grafikprozessor zu viele Instruktionen auf einmal bekommen und das Programm würde abstürzen. Das wiederum hängt von Deiner Grafikkarte und Deinem Treiber ab. Wenn Du Epsilon und Maximum Step size nicht veränderst, kann erstmal nichts passieren. Dieses Programm entstand mit der Hilfe von Keenan Crane, dessen Shader ich nach GLSL portiert und modifiziert habe.

So wird das Programm bedient:

Die Tastaturbefehle funktionieren nur, wenn das Fraktal-Bild vorher mit der Maus fokussiert wurde.

Linke Maustaste gedrückt: Rotation des Fraktals
Strg+linke Maustaste: Zoom
Alt+linke Maustaste: Verschiebung des Fraktals

Shift+linke Maustaste: Rotation der Lichtquelle relativ zur Position des Betrachters
Shift+Strg+linke Maustaste: Die Lichtquelle wird vom Rotationsmittelpunkt entfernt oder nähert sich ihm
Shift+Alt+linke Maustaste: Die Lichtquelle wird bewegt.

l/L: cx wird verkleinert/vergrößert.
i/I: cy wird verkleinert/vergrößert.
j/J: cz wird verkleinert/vergrößert.
k/K: cw wird verkleinert/vergrößert.

Leertaste: Animation von c an- oder ausschalten.

+/-: Iterationen herauf- oder heruntersetzen
e/E: Epsilon
m/M: maximum step size
s: Schatten

Die Farben werden mit Fractal->Color Settings verändert.

Hier ist der Code.

Ausarbeitung für das Fach Geomatik: Geomatik.pdf

Der Quellcode meiner Programme darf nur frei für nichtkommerzielle und friedliche Zwecke verwendet werden.

Copyright und Impressum