Grafikdemos selbstgemacht

Das vorliegende Programm ermöglicht es, eigene bewegte Grafiken auf dem Sinclair QL zu erstellen. Es kann durch das beigefügte Beispielprogramm aber auch einfach nur als Grafikdemo betrachtet werden.
Obwohl Computer ungeheuer vielseitige Instrumente sind, kann man auf Ausstellungen und Messen immer wieder beobachten, daß eine Anwendung offensichtlich ganz besondere Attraktivität besitzt, nämlich komplexe bewegte Grafiken. In den seltensten Fällen allerdings werden diese in Echtzeit erstellt. Die dazu erforderliche Rechenleistung übersteigt oft bei weitem das heute technisch Machbare, selbst wenn man große und größte Rechenanlagen einsetzt.

Man kann zwar mit allerlei Tricks und Kniffen schon recht gute Resultate in der Echtzeit-Animation auch mit kleinen Rechnern erreichen; auf eine in Echtzeit errechnete animierte räumliche Darstellung in Strahlverfolgungstechnik auf dem Homecomputer wird 'man aber wohl noch etwas warten müssen.
Eine häufig angewendete Methode besteht darin, vom Computer kleine Filme erstellen zu lassen. Dabei kann sich der Rechner für die Erzeugung jedes Bildes ruhig Zeit lassen. Bei der Darstellung werden diese dann aber blitzschnell hintereinander aus dem Speicher abgerufen. Auf diese Weise entsteht der Eindruck einer fließenden Bewegung in höchster Qualität.

Der Nachteil dieser Methode liegt auf der Hand. Um eine halbwegs akzeptable Animation zu realisieren, muß nicht nur eine Unmenge.an Bildern erzeugt werden, was im allgemeinen sehr lange dauert, sondern auch schnell verfügbar abgelegt werden. Dies setzt einen großen Hauptspeicher voraus.

Hier ist zu berücksichtigen, daß der benötigte Speicherplatz mit der Anzahl der Farben und besonders mit der verwendeten Bildschirmauflösung sehr schnell ansteigt. Braucht ein Spectrum oder C 64 noch rund 8 KByte für eine Grafikseite (bei entweder geringer Auflösung oder nicht frei wählbaren Farben), so sind es beim QL schon 32 KByte. Man kann sich leicht ausrechnen, daß z.B. bei einer Auflösung von 644400 Punkten aus 512 frei wählbaren Farben der Speicherplatzbedarf rund 280 KByte beträgt. Bei 1024*1024 Punkten aus 4096 Farben sind 1,5 MByte pro Bild nötig.

So ist es auch verständlich, daß die Anwendung der Filmtechnik bei Homecomputern wie dem C 64 mit einem Verhältnis Bildspeicher zu Hauptspeicher von 1:8 eher erfolgversprechend ist als beim nicht ausgebauten QL (1:4). Zudem erfordert das Verschieben von 32 KByte wesentlich mehr Zeit als das von 8 KByte. Folglich kommt beim QL eine Animation auf der Basis ganzer Bilder schon allein deshalb nicht in Frage, weil man beim Bildaufbau regelrecht zusehen kann.

Beschränkt man sich jedoch mit dem Abspeichern auf die Teile des Bildschirms, in denen sich Bewegungen abspielen, so hat man quasi die Auflösung künstlich erniedrigt. Daraus ergeben sich folgende Vorteile: geringerer Speicherbedarf und höhere, vielleicht sogar akzeptable Umspeichergeschwindigkeit. Je kleiner man die benutzten Bildschirmbereiche hält, umso fließender läuft die Animation ab und um so längere Filmchen lassen sich im Speicher unterbringen.

Das hier vorgestellte Programm stellt einen Satz von Prozeduren und Funktionen zur Verfügung, welche die gesamte Verwaltungsarbeit für eine solche Filmchen-Animation auf dem QL übernehmen. Dabei sollen die dargestellten Abläufe möglichst periodisch erfolgen, d.h., das letzte Bild soll nahtlos an das erste passen. Damit entstehen Endlos-Filmchen.

Programme, die dieses Modul verwenden, sollten im Hauptteil nach folgendem Schema aufgebaut sein (s. auch Beispiel-Listing)

Außerdem muß der Benutzer eine Prozedur mit dem Namen user_periodic schreiben, die von ani_work. aufgerufen wird. Diese muß ein komplettes Bild produzieren, und zwar in Abhängigkeit von der globalen Variablen fi, die den momentanen Phasenzustand (0..2*PI) beinhaltet.

Zusätzlich besteht die Möglichkeit, die Variable r abzufragen. Sie enthält die Nummer des gerade bearbeiteten Bildes, wobei die Zählung bei Null beginnt und entsprechend bis zur Periodenzahl-1 läuft. Die Variable r darf aber auf keinen Fall verändert werden; es handelt sich hier um die Schleifenvariable in ani_work.
Nun wollen wir zur Arbeitsweise der einzelnen Prozeduren und Funktionen kommen.

Prozedur ani_init (Filmlänge)
Ihr Aufruf teilt dem Modul die Anzahl der zu verwendenden Bilder mit. Diese Länge ist für alle benutzten Animationskanäle (Fenster) gleich. Die für das Modul wichtigen Variablen werden initialisiert. Die Prozedur darf nur einmal aufgerufen werden. Dies muß geschehen, bevor irgendeine andere Funktion oder Prozedur des Moduls in Anspruch genommen wird.

Funktion ani_open (b, h, x, Y)
Die Argumente dieser Funktion entsprechen genau denen des SuperBasic-Befehls WINDOW (Breite, Höhe, X- und Y-Position). Eine Ausnahme macht lediglich die Kanalnummer; sie wird als Funktionswert zurückgeliefert.
Tatsächlich öffnet diese Funktion auch ein Fenster mit den entsprechenden Werten und reserviert gleichzeitig den notwendigen Speicherbereich für die durch ani_init angegebene Anzahl von Bildern. Aus diesem Grund sollte die Funktion auch nur aufgerufen werden, wenn man Größe und Position der benötigten Fenster bestimmt hat. Zum Ausprobieren sollte man WINDOW verwenden. Der einmal reservierte Speicherbereich kann nicht mehr freigegeben werden (RESPR).

Für die X-Position x und die Breite b gelten gewisse Einschränkungen: Da eine hohe Ausführungsgeschwindigkeit gefragt ist, wird im Maschinenprogramm zur Verschiebung der Speicherbereiche auf zeitraubende "Bitschiebereien" verzichtet und gleich langwortweise umgeladen. Dies hat zur Folge, daß die betreffenden Bereiche mit einer geraden Adresse beginnen und eine Länge von n*4 aufweisen müssen.
Um den Benutzer immer daran zu erinnern und ungewollte Effekte. zu vermeiden, werden als Breiten nur Vielfache von 16 akzeptiert, als X-Positionen nur Vielfache. von acht. Die Routine user_periodic darf nur innerhalb der so zugewiesenen Fenster operieren!

Die neu geöffneten Windows werden gelöscht, und die Anzahl der reservierten Bytes wird ausgedruckt. Um die korrekte Lage der Fenster zu überprüfen, läßt sich der gesamte Bildschirm zuvor einfärben. Es können höchstens fünf Animationsfenster geöffnet werden.

Prozedur ani _work
Mit ihrem Aufruf wird die Grafik erstellt.

Prozedur ani_motion (von, bis, Phasen-Anzahl)
Mit ihr erfolgt die Animation. Die Variablen von und bis legen die Anzahl der zu verwendenden Einzelbilder und den Startpunkt (das erste Bild) fest. Die Variable Phasenzahl bestimmt die Anzahl der Bilder, nach der sich die Durchlaufrichtung umkehrt. Hier sollte mindestens eine volle Periode angegeben werden.

Die Variablen von und bis dürfen auch negative Werte annehmen, nicht jedoch solche außerhalb des Bereichs - 32768 bis 32767. Soll die Animation endlos fortgesetzt werden; so ist der Aufruf von ani_motion in einer Schleife unterzubringen.

Das Listing enthält als Beispiel ein Grafikdemo, das sich hinter Animationen auf dem Atari ST oder dem Amiga nicht zu verstecken braucht. Der Aufbau des Beispiels hilft sicherlich beim Entwerfen eigener Routinen.


Frank Andert
Aus: Computer Kontakt 08 / 1987, Seite

Links

Copyright-Bestimmungen: siehe Über diese Seite