Prozedurale Grafiken

  • Guten Abend.

    Irgendwann vor geraumer Zeit tauchten mal Spiele mit prozeduralen Grafiken auf (in ASM).
    Das was da Präsentiert wurde kann ich natürlich nichtmal annähernd erreichen.

    Da ich in der Grafikgeneration großes Potential sehe (man kann z.B. Animierte Hintergründe oä gestalten indem man einige Parameter in der Prozedur verändert), habe ich mir überlegt, dass GDI+ (und WinAPI, aber das wird iwann nachgerüstet. Es ist ja alles im Aufbau) eigentlich alles nötige besitzt. Man muss ja das Rad nicht 10Mal neu erfinden.

    Alte Beschreibung

    Das vorliegende ist im Prinzip also alles nur GDI+, oder eigene Funktionen als Kürzel zusammengesteckt und von AutoIt interpretiert. Dabei geht die Übersicht zu 105% verloren, aber das is erstmal wurscht^^
    Zum Beispiel zwei Beispiele:
    Beispiel 1:
    Dieses Bild wurde mit Folgendem Code erzeugt: 'Smo 4|Cle $v1|SBc $v2|FPi -$b,-$h,$b*3,$h*3,$i,5~0~360~10|SBc $v3|FEl -$b/3+$b*$i/$m,-$h/3+$h*$i/$m,$b*5/3-($b*$i/$m)*2,$h*5/3-($h*$i/$m)*2~1~90~1|Blur'
    [Blockierte Grafik: http://i.imgur.com/bmNoJ.png]

    Beispiel 2:
    Die Folgenden Bilder unterscheiden sich in der Prozedur nur in 3 zeichen. (Die man auch als Parameter setzen könnte. Dann ist die Prozedur gleich und man muss nur einen Parameter ändern)
    [Blockierte Grafik: http://i.imgur.com/wlBoi.png]

    [Blockierte Grafik: http://i.imgur.com/24xZQ.png]


    Vorteile der prozeduralen Lösung:
    - Kaum Speicherverbrauch (in Kompillierter Form ca. 20 KB für den Interpreter und dann weniger als 1KB Pro Bild)
    - (fast) Beliebige Bildmaße (je größer das Bild, desto länger dauert das erzeugen)
    - Animation durch Veränderung von Parametern möglich.
    - Man hat selbst bei AutoIt Programmen endlich einen grund für einen Ladebalken^^
    - Einbau von Eigenen Funktionen möglich.

    Nachteile:
    - Schlechte Übersicht über den Code wenn er erstmal zusammengefasst ist. Zeilenweise kann man ihn mit etwas Mühe lesen wenn man die Funktionen hinter den Kürzeln kennt.
    - Bilder können natürlich nicht erstellt werden. Nur relativ simple Grafiken (Vektorgrafiken, keine Bitmaps)
    - Bei bisher sind nur sehr einfache Schleifen im interpretierten Code möglich. (ein For - Einzeiler. Mehrere zeilen gehen nicht)
    - Langsame Ausführung wenn die Bilder größer werden. Gleichzeitiger Vorteil, da bei großen Bildern natürlich viel Speicher gespaart wird. So kann man große Grafiken nutzen, die sonst mehrere MB hätten und so nur ein paar Bytes verbrauchen)

    Ich will hier eigentlich nicht groß auf den Putz hauen. Deshalb steckts auch im OffTopic.
    Ich möchte nur die Meinung dazu, und ob sowas evtl jemand gebrauchen kann.
    Aus eigenen Interessen (Vollbildspiele) werde ich das Thema sowieso so gaanz nebenbei weiterverfolgen.

    zu guter Letzt das Skript :P

    z. 10: Größe des Entstehenden Bildes verändern
    z. 29f: Beispiel2
    z. 25f: Beispiel1


    Nach kleinen Veränderungen am Skript ist nun folgendes anzumerken:
    - Grafiken lassen sich in Deutsch herstellen (Kein seltsames anderstsprachiges schreiben mehr)
    - Es gibt eine Dokumentation über alle verfügbaren Befehle
    - Ein GUI ist auch mit dabei
    - Bilder können nun einfach gespeichert werden
    - Es macht jetzt auch Spaß :P

    Vor und Nachteile bleiben ähnlich, bis auf:
    - Die Übersicht geht nicht mehr verloren, da man jetzt mit Returns eine Neue Zeile einleitet statt mit "|"
    - Einige Befehle kamen im Update hinzu
    - Jetzt einfach zu handhaben. (vorher musste man seltsame Buchstabenkombinationen im Programmcode verändern. Das macht das Programm jetzt selbst)

    Codebeispiele

    Um ein Bild zu generieren ist nunmehr folgendes nötig:
    [Blockierte Grafik: http://i.imgur.com/5sRNn.png]


    Das Programm macht dararaus dann:

    Code
    00Ein|020xFF0090D8|0350,3,5,1,0x80FFFFFF,False|03500,1,2,2,0x80FFFFFF,False|00Aus|040x20FFFFFF|0D$b/80+$i*$b/40,0,$b/40,$h~0~40~2|040x06FFFFFF|0B-$b/3+$b*$i/$m,-$h/3+$h*$i/$m,$b*5/3-($b*$i/$m)*2,$h*5/3-($h*$i/$m)*2~1~70~1|0A

    Ein Befehl endet, sofern er Parameter besitzt mit einem Doppelpunkt
    Die Trennung mehrerer Befehle erfolgt durch ein Return

    Parameter (nötig um das Bild zu animieren) können eingesetzt werden ($v1, $v2, $v3 und $v4), sind aber im GUI noch nicht eingebaut.


    Der alte Dateianhang beinhaltet die vorherige Version (ohne alles so zu sagen^^)
    Der Neue beinhaltet die Überarbeitete Fassung mit GUI.

    lg
    Mars(i)

  • So ganz hat es mich nicht verlassen und (inzwischen ist es schon ein paar Tage her) nun gibt es die "Sprache" auch in "Verständlich".
    Man kann also jetzt auf Deutsch ein Bild herstellen. (z.B. Fülle Alles : 0xFFFF0000 ---> Das Ganze Bild wird Rot.)

    Die Abstürze und einige andere Fehler sind gefunden und größtenteils behoben.

    Dazu gibts ein GUI, in dem man das Bild aufbauen kann.
    Das Fertige Bild kann man Speichern (Auflösung max.9999px. Aber das kann man ja anpassen. Der PC rechnet dann halt eine Weile^^)
    Oder Das was einem in der Vorschau angezeigt wird Speichern
    Oder die Prozedur etwas zusammengefasst speichern. Dabei wird aber NICHT der Deutsche Text gesichert, sondern das, was das Programm interpretiert.

    lg
    M

  • Sehr interessante Spielerei und sauber programmiert! :thumbup:

    Grafische Spielereien sind i.d.R. "nur brotlose Kunst" und meistens eher was für's Auge und meistens eher selten zu gebrauchen.

    Aber nichts desto trotz finde ich immer wieder klasse, irgend welche grafischen Spielereien zu sehen. Mach weiter so (hast dich sehr gut entwickelt!!!) :thumbup:

    Hauptsache es macht SPPPPPAAAAAAAAASSSSSSSSSSS! ;)

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Was soll ich sagen.....wieder mal ein echter Marsi! :thumbup:
    Sehr fein, klasse Idee, TOP umgesetzt!

    Aber wie UEZ schon sagte, brotlose Kunst (TROTZDEM ist es eine KUNST!).
    Aber es macht Spass :D , ansonsten ist es doch auch langweilig, wenn man keine Herausforderung hat^^

  • Schön, dass es euch gefällt :)

    Eine Anwendung wird sich dafür schon finden :P

    Im nächsten Schritt (der aber noch dauern wird, weil ich ja nicht den ganzen Tag frei habe^^) wird dann das Animieren im Vordergrund stehen.
    Dazu sind die (jetzt erstmal weggefallenen) Parameter für die Erstellung vorgesehen.

    lg
    Mars(i)