Logo: Strunz Seitenlogo: Strunz-Design
Auswahl
 Begrüßung
\/Programmieren
 Galerie
 Sonstiges

Coding
 Übersicht
 Albengenerator
\/Demoeffekte
 ICPC
 Links

Demoeffekte
 Übersicht
 Zoomer
 Lasershow
->Vectorballs
 Delayvectors
 

Ein kleines Vektorballdemo mit Quellcodes und Tutorial

Beschreibung des Effektes

Vor einem festen Hintergrundbild bewegen sich verschiedene Anordnungen von Kugeln. Die Kugeln beschreiben dabei diverse 3D-Objekte wie Würfel, Pyramide oder eine Spirale. Weit entfernte Kugeln werden dabei perspektivisch korrekt kleiner gezeichnet, Kugeln nahe am Betrachter größer.
Eine rotierende Ebene aus 8*64=384 Kugeln zeigt eine sich bewegende Laufschrift. Vom Prinzip her ähnlich den bekannten LED-Laufschriften.

Desweiteren sind noch ein paar kleinere Gimmicks eingebaut, wie eine Überblendung der Szene nach weiß, der fliessende Wechsel der Kugelanordnungen untereinander (3D-Morphing) und das Herein- bzw. Herausschieben der sich bewegenden Szene vom Bildschirm.

In welchen Demos zu sehen?

Vektorballs waren damals ein sehr beliebter Effekt, da sie einfach zu realisieren sind und schöne Effekte ermöglichen. Den meiner Meinung nach schönsten Vektorballs-Part habe ich in der "Elements"-Demo der Demogruppe "Xography" (1993) gesehen. Dort bewegen sich richtig komplexe Gebilde aus bunten Kugeln verschiedener Größe über einem reflektierenden Schachbrett. Auch die Elemente sind schön entworfen; unter anderem ein Hubschrauber mit drehenden Rotoren oder ein Modell des Raumschiffs Enterprise.

Weitere schöne Demos mit Vektorball-Parts:

  • "Psycho Neurosis" - Demogruppe "Asphyxia" (1994)
  • "Sagadust" - Demogruppe "DUST" (1993)
  • "Oxygene" - Demogruppe "Contrast" (1996)

Wie wirds gemacht?

Eigentlich ein sehr einfacher Effekt, bei dem 3D-Objekte durch Kugeln imitiert und auf dem Bildschirm dargestellt werden. Als erstes benötigt man natürlich die Koordinaten der darzustellenden Objekte. Für die hier verwendeten, noch recht einfachen Objekte habe ich damals die Koordinaten mit Papier und Bleistift konstruiert. Man kann natürlich auch irgendein Modellierungsprogramm verwenden, muß dabei aber nur herausfinden, wie man dann an die Koordinaten herankommt. Die Koordinaten liegen hier als dreidimensionale Vektoren des Typs

Record x,y,z:longint; end;
vor. Hat man die Koordinaten ermittelt, verfährt man nach dem folgenden Schema:

  1. Festlegung der drei Rotationsvektoren für die Darstellung der Figur im aktuellen Bild.
    Festlegung der Lage des Objektes im 3D-Raum (Relative Position festlegen)
  2. Berechnung der Transformationsmatrix aus den eben festgelegten Daten.
  3. Transformation aller Vektoren. Das bedeutet, jeder Vektor, der später einmal die Position einer Kugel darstellen soll, gemäß der Matrix rotiert werden muß.
  4. Perspektivische 3D-2D-Transformation. Bedeutet, daß die 3D-Punkte auf den Bildschirm projiziert werden. Man erhält die Bildschirmkoordinaten x, y und die Tiefe z eines jeden Punktes des Objektes.
  5. Für jeden Kugelpunkt: Berechnung des Durchmessers der zu zeichnenden Kugel.
  6. Herausfiltern aller Kugeln, die bereits ausserhalb des Bildschirmes liegen.
  7. Sortierung der Kugeln der Tiefe nach, damit weiter hinten liegende Kugeln zuerst gezeichnet werden können (Painters-Algorithmus). Das Mittel der Wahl ist hier Quicksort.
  8. Synchronisation mit Bildschirm, warten auf vertikalen Retrace des Elektronenstrahls
  9. Löschung des Bildschirminhalts, indem das Hintergrundbild über den Bildschirm kopiert wird.
  10. Zeichnung der Kugeln auf den Bildschirm, hintere Kugeln werden zuerst gezeichnet. Der Durchmesser der Kugeln errechnet sich aus der Tiefe. Kugeln, die nur halb auf dem Bildschirm liegen, müssen sauber abgeschnitten werden (Clipping).
  11. Fertig!
    Wiederholung des Zyklusses mit Schritt 1.

Programmablauf pro Frame

Programminfo

Turbo Pascal (kompiliert mit TP 7.0)
Videomodus: Standard Mode 13h (MCGA), 320x200 Pixel bei 256 Farben
benötigt und enthält meine Vektorunit
Kernschleifen in Assembler, Effekt läuft in Echtzeit ab
XXXX LoC Hauptprogramm (Lines of Code)
529 LoC Vektorunit

Geschwindigkeit:

Normale Objekte:
AMD K6-233 mit Synchronisation: XXXX Frames pro Sekunde (fps)
AMD K6-233 ohne Synchronisation: XXXX Frames pro Sekunde (Max-fps)

Scroller mit 384 Kugeln
AMD K6-233 mit Synchronisation: XXXX Frames pro Sekunde (fps)
AMD K6-233 ohne Synchronisation: XXXX Frames pro Sekunde (Max-fps)

Download

Download als ZIP-File:
vecballs.zip (XXXX Bytes)
enthält ausführbares .EXE-Files, die Quellcodes und das Hintergrundbild.
Eine genauere Beschreibung der mitgelieferten Vektorunit kann ich hier leider nicht mitliefern, da sie den Rahmen sprengen würde. Es sind allerdings nur sehr wenig Zeilen im Hauptprogramm nötig, um die Unit zu verwenden. Mit ein wenig Experimentieren sollte ein problemloses Einbinden in eigene Programme kein Problem darstellen.

Screenshots

Die sich bewegende Kugelanordnung vor dem Hintergrundbild. Dieses wurde von Sebastian Seiffert mit Hilfe des Freeware-Raytracers "POV-Ray" gerendert.
Die sich bewegenden Kugeln ändern von Zeit zu Zeit ihre Anordnung.
384 Kugeln erzeugen eine Ebene, auf der sich eine Laufschrift bewegt.
Die Kugeln passen ihren Durchmesser perspektivisch korrekt der Tiefe an.


Seitenanfang

Inhalt und Design von Florian Evers, florian-evers@gmx.de