
Update
Hallo erstmal 🙂
Also das letzte Update zu dieser Seite ist schon eine Weile her, heute ist es jedoch mal wieder so weit :). Nachdem ich in meinem aktuellen Job nicht viel mit CG (und verwandten Themen) zu tun habe, werde ich hier (hoffentlich) öfter mal ein kleines Beispiel oder einen Algorithmus veröffentlichen.
Ein erstes Ziel
Ein erstes Ziel (so zum Aufwärmen) wird es einmal sein, ein kleines Tool zu schreiben, mit dem User hier einfache L-Systeme (oder hier) schreiben können und verschiedenste „Add-Ons“ zu den „Standard“ L-Systemen probieren können.
Beispiele für einfache L-Systeme findet ihr zum Beispiel hier: L-System Turtle Graphics Renderer oder Lindenmayer System Generator.
Wie sieht so ein L-System überhaupt aus?
Simple L-Systeme
Gute Nachrichten gibt es für euch, wenn ihr euch das originale Buch durchlesen möchtet. Dieses ist online als PDF File u.a. hier in englischer Sprache verfügbar (von Aristid Lindenmayer und Przemysław Prusinkiewicz – The Algorithmic Beauty of Plants)
Ich möchte damit beginnen, ein einfaches 2D-System zu erstellen, mit dem man einfache L-Systeme möglichst interaktiv abbilden kann. Diese sollen im Browser dann direkt (mittels einfachen Turtle-Grafiken) gezeichnet werden. Die Darstellung wird am Beginn nur sehr einfach sein, also keine Farben, keine Parameter, etc…
Im nächsten Schritt sollen komplexere L-Systeme folgen, wie z.B. kontextsensitive L-Systeme, randomisierte L-Systeme, parametrische L-Systeme, etc… (vielleicht sogar sogenannte „selbst-sensitive“ L-Systeme)
3D
Wenn diese Basisfunktoinalitäten einmal erstellt sind, möchte ich mit 3-dimensionalen L-Systemen fortfahren. Dazu müssen dann die Interpretationen der Zeichen geändert werden, sowie eine komplexere Positionierungen der „Turtle“ (mittels 4×4 Matrizen) eingesetzt werden.
Die Möglichkeiten jedoch wachsen durch die 3. Dimension unglaublich. Von einer simplen 2D Struktur, wie einer Pflanze, kann man so sehr leicht zu deren 3-dimensionalem Gegenstück gelangen.
Diese 3-dimensionalen Resultate werden am Beginn relativ einfach aussehen, das heißt im Basis-Fall, dass „Linien“ dann durch einfache Zylinder dargestellt werden. Diese Darstellung soll in Folge verbessert werden, sodass zusammenhängende Geometrien entstehen.
…und mehr
Je nach Bedarf (und Motivation) möchte ich auch einen Export der erstellten Geometrien bzw. der Ausgabe in hoher Auflösung ermöglichen, dies ist aber nicht fix geplant.
Ebenso unsicher ist, ob ich zusätzlich zu den hier gezeigten Beispielen und Tools auch jeweils eine Variant in C# veröffentliche, damit man eventuell auch offline mit den L-Systemen experimentieren kann.
Weitere Ideen
Weiters wäre es möglich dieses Tool dann weiter auszubauen, um in Zukunft auch CGA (Computer Generated Architecture) oder andere prozedural erstellte Objekte zu generieren. In dem Fall wäre es aber wahrscheinlich sinnvoll komplett auf C# oder C++ umzusteigen, da diese Sprachen doch schneller sind, als Javascript…
Eine „Versallgemeinerung“ von CGA wäre die Generierung von beliebig aussehenden Objekten und Formen. Interessant wäre es auch meine entwickelte Half-Edge Datenstruktur hier irgendwie miteinzubinden und die Vorteile einer solchen Datenstruktur gleich miteinfließen zu lassen und zu nutzen… Ich überlege mir dazu noch was 🙂
Also, heute werde ich zumindest einmal damit starten eine einfache Grafik in 2D zu erstellen und das auch hier zu Posten.
Lg Franz