Logo Qualitäts- und UnterstützungsAgentur

Startseite Bildungsportal NRW

Orientierungsbereich (Sprungmarken)

Schnelleinstieg in die Programmierung mit GLOOP

Allgemeines

Die GLOOP-Umgebung simuliert einen dreidimensionalen Raum, der mit Hilfe eines Kameraobjekts vom Typ GLKamera in Echtzeit beobachtet werden kann. Der Raum ist zunächst leer und wird mittels eines dreidimensionalen, rechtshändischen Koordinatensystems strukturiert. Er erstreckt sich in die positive und in die negative Richtung aller Koordinatenachsen bis in die Unendlichkeit.
Aus vorgegebenen Klassen der GLOOP-Umgebung können Objekte erstellt werden, die automatisch in den dreidimensionalen Raum eingefügt werden. Dabei muss jeweils der Mittelpunkt und die Ausdehung des Objekts angegeben werden. Beispiele für solche Klassen sind: GLKugel, GLQuader, GLZylinder, GLWuerfel, GLKegel, GLKegelstumpf, GLTorus und GLPrismoid. Die Bezeichner der GLOOP-Klassen sind selbsterklärend und zeigen, um welche Sorte von Objekt es sich handelt. Sie beginnen mit dem Präfix GL, um später die Bezeichner der vorgefertigten GLOOP-Klassen besser von denen eigener Klassen unterscheiden zu können.
Damit die Objekte auch im Kamerabild zu sehen sind, muss die Szene noch durch ein Lichtobjekt vom Typ GLLicht ausgeleuchtet werden. Das einfachste sinnvolle GLOOP-Programm besteht also aus einem Kameraobjekt, einem Lichtobjekt und einem Objekt, das betrachtet wird.

Das Programm „Hello World!“

Um ein ganz einfaches GLOOP-Programm, das „Hello Word“-Programm, zu realisieren, wird die einzelne Klasse Kugeldemo erstellt und mit dem folgenden Quellcode implementiert:

1    import GLOOP.*;
2    class Kugeldemo {
3        GLKamera meineKamera;
4        GLLicht meinLicht;
5        GLKugel meineKugel;
6    
7        Kugeldemo () {
8          meineKamera = new GLKamera();
9          meinLicht   = new GLLicht();
10          meineKugel  = new GLKugel (0,0,0, 50);
11        }
12    }

Am Anfang der Klasse, d. h. in Zeile 1, wird die GLOOP-Bibliothek importiert. In der Deklaration wird jeweils ein Objekt vom Typ GLKamera, GLLicht und GLKugel angemeldet. Im Konstruktor werden die drei Objekte erstellt. Bei der Kugel wird die Stelle (0,0,0) als Mittelpunkt und der Wert 50 als Radius angegeben.

Das Erstellen einer Kamera führt dazu, dass ein Fenster aufspringt, in dem der virtuelle Raum in Echtzeit dargestellt wird. Die Standardposition der Kamera ist bei (0,0,500) mit Blick auf den Ursprung des Koordinatensystems. Die Lichtquelle leuchtet die Szene aus, so dass nun eine weiße Kugel zu sehen ist (vgl. Abbildung 2).

Abbildung 2: Kugel mit eingeblendeten Koordinatenachsen
Abbildung 2: Kugel mit eingeblendeten Koordinatenachsen

Alle sichtbaren geometrischen Objekte, die im Raum platziert werden können, sind Spezialisierungen der Klasse GLObjekt und verfügen somit über den gleichen Methodensatz. Zum Beispiel kann jedes Objekt vom Typ GLObjekt mit einer Textur überzogen werden.  

Die folgende Erweiterung macht aus der Kugel einen Globus, indem eine Textur der Erde ergänzt wird (vgl. Abbildung 3). Die in Zeile 11 angegebene Bilddatei muss dazu im aktuellen Projektordner liegen.

9          [...]
10        meineKugel = new GLKugel(0,0,0, 50);
11        meineKugel.setzeTextur("Erde.jpg“);
12        [...]

 

Abbildung 2: Kugel mit Erdtextur
Abbildung 3: Kugel mit Erdtextur

Animationen

Möchte man mehr als ein stehendes Bild zeigen, so muss eine Animationschleife ergänzt werden. Der folgende Quellcode stellt eine einfache, bewegte Simulation der sich drehenden Erde dar.

1    import GLOOP.*;
2    class Weltdemo {
3      GLKamera meineKamera;
4      GLLicht meinLicht;
5      GLKugel dieErde;
6      GLTastatur meineTastatur;
7    
8      Weltdemo(){
9          meineKamera = new GLKamera();
10        meinLicht = new GLLicht();
11        meineTastatur = new GLTastatur();
12    
13        dieErde = new GLKugel (0,0,0,150);
14        dieErde.setzeTextur ("Erde.jpg");
15        dieErde.drehe(90,0,0);
16        this.starteAnimation();
17      }
18    
19      void starteAnimation(){
20        while (!meineTastatur.esc()){
21          dieErde.drehe(0,1,0);
22          Sys.warte();
23        }
24        Sys.beenden();
25      }
26    
27    }

In der obigen Klasse Weltdemo werden vier Objekte deklariert: eine Kamera, eine Lichtquelle, eine Kugel und ein Objekt zur Tastaturabfrage. Alle vier Objekte werden im Konstruktor der Klasse Weltdemo erstellt. Die Kugel wird zudem mit einer Erdtextur versehen und in Zeile 15 aus optischen Grün-den um 90 Grad gedreht.
In der Methode starteAnimation wird die Kugel von Zeile 20 bis Zeile 23 mit Hilfe der Animationsschleife bewegt. Diese Schleife läuft, solange nicht die Taste ESC gedrückt wurde. Bei jedem Durchlauf des Schleifenkörpers wird die Kugel mit Hilfe der Methode drehe um 1 Grad um die Y-Achse gedreht. Da die Kugel immer wieder um 1 Grad gedreht wird und die Kamera die Kugel kontinuierlich im aktuellen Zustand anzeigt, scheint die Kugel eine gleichmäßige Rotation durchzuführen (vgl. Abbildung 4). Der Aufruf der statischen Methode warte in Zeile 22 sorgt dafür, dass die Animation nicht zu schnell abläuft.
Abbildung 2: Animierte Erdkugel
Abbildung 4: Animierte Erdkugel

Möchte man komplexere Simulationen realisieren, so wird man nicht mehr damit auskommen, einfachen geometrischen Objekten Aufträge zu erteilen. Vielmehr wir man dazu übergehen, mehrere Objekte zu neuen Klassen zusammenzufassen oder Objekte mittels Vererbung zu spezialisieren. Die in Abbildung 5 gezeigte Teilmodellierung einer Analoguhr gibt einen ersten Eindruck davon.

 

Abbildung 5: Analoguhr mit TeilmodellierungAbbildung 5: Analoguhr mit Teilmodellierung
Abbildung 5: Analoguhr mit Teilmodellierung

Zum Seitenanfang

© 2019 Qualitäts- und UnterstützungsAgentur - Landesinstitut für Schule - Letzte Änderung: 09.03.2016