1 Projektbeschreibung

Dieses Projekt ist im Rahmen der Veranstaltung "Interaktive 3D-Computergrafik" des Masterstudiengangs Informatik an der Hochschule Rhein-Main entstanden. Im Laufe des Semesters sollte ein Programm entwickelt werden, welches die Möglchkeit bietet, mehrere dreidimensionale, texturierte Objekte in einem Szenegraphen anzuzeigen und in der Szene getrennt von einander zu transformieren. Weiterhin sollten die Oberfläche der Objekte geglättet werden können und Randkanten erkannt und angezeigt werden. Zudem sollte es möglich sein, Eckpunkte eines Objekts mit der Maus auszuwählen und diese anschließend zu bewegen, um so ein kleines Modellierwerkzeug bereit zu stellen. Anhand dieser Vorgaben ist das hier beschriebene Programm entstanden. Es bietet zusätzlich die Funktionen, mehrere Kameras in einer Szene zu verwalten und die Perspektive zwischen ihnen zu wechseln, sowie grundlegende Materialeinstellungen und die Möglichkeit, Texturen für einzelne Objekte zu laden.

2 Das Programm

Die entstandene Software trägt den Namen Site3D (engl.: site = Baugrund). Sie wurde mit Java 1.6 und dem OpenGL 3.0 Binding JoGL 1.1.1 programmiert. Weitere Frameworks wurden nicht verwendet. Für die Ausführung wird eine OpenGL 3.0 fähige Grafikkarte benötigt.

2.1 Die Programmoberfläche

Die Programmoberfläche ist in die vier in Abb. 1 markierten Hauptbereiche unterteilt. Die Menüleiste befindet sich im oberen Teil des Programms. Über sie können, wie später noch ausführlich erklärt wird, Objekte erzeugt/geladen und die Kameras verwaltet werden. Außerdem kann das Programm im Untermenü "File" mit der Option "Close" beendet werden.

Abb. 1: Ein Bild von der Programmoberfläche nach Programmstart

In der linken Seite der Oberfläche befindet sich das Seitenmenü, über das ausgewählte Objekte auf verschiedene Art und Weise verändert werden können. Rechts daneben ist die 3D-Ansicht der Szene. Darin werden alle Objekte in dreidimensionaler Fluchtpunktdarstellung angezeigt. Zur leichteren Orientierung wird ein ebenes Gitternetz im Koordinatenursprung, parallel zur xz-Ebene dargestellt, das einen Boden simuliert. Unten in der Programmoberfläche ist die Statusleiste zu finden. Sie zeigt die Anzahl der pro Sekunde dargestellten Bilder (fps) an, um einen Eindruck für die Geschwindigkeit des Programms zu vermitteln. Je mehr Objekte sich in der Szene befinden, desto weniger Bilder pro Sekunde können berechnet werden.

2.2 Navigation in der Szene

Der Benutzer betrachtet die Szene immer durch eine virtuelle Kamera, die frei im Raum bewegt werden kann. Die Kamera verhält sich dabei so, als würde man mit ihr im Raum schweben.

Abb. 2: Rotation der Kamera
Abb. 3: Verschiebung der Kamera
Abb. 4: Zoomen der Kamera

Während die Alt-Taste gedrückt gehalten wird, können Benutzer per Drag&Drop mit der Maus in der 3D-Ansicht die Kamera steuern. Dabei wird zwischen den drei Maustasten unterschieden. Mit der linken Maustaste wird die Kamera um ihre eigenen Achsen gedreht (Abb. 2). Befindet sich der Mauszeiger hierbei in der Mitte der 3D-Ansicht, so wird die Kamera durch Rechts- und Links-Bewegungen seitlich gedreht (Kopfschütteln) und durch Auf- und Ab-Bewegungen nach oben und unten gedreht (Kopfnicken). Je weiter sich der Mauszeiger am äußeren Rand der 3D-Ansicht befindet, desto stärker wird die Kamera bei den Bewegungen entsprechend seitlich gekippt (Kopfneigen). Drag&Drop mit der mittleren Maustaste (Druck auf das Mausrad) verschiebt die Kamera entsprechend der Bewegung auf, ab, nach rechts und links (Abb. 3). Die rechte Maustaste bewegt die Kamera nach vorne und hinten, was auch als Zoom interpertiert werden kann (Abb. 4). Diese Bewegung kann auch mit Rollen des Mausrads vollzogen werden, während ebensfalls die Alt-Taste gedrückt gehalten wird.

3 Objekte der Szene

Site3D unterscheidet grundsätzlich zwischen zwei Arten von Objekten: Kameras und 3D-Modelle. Letztere werden wieder in zwei Unterkategorien unterteilt: komplexe Objekte (werden aus Dateien geladen) und primitive Polygon-Objekte.

3.1 Primitive Polygone

Über das Untermenü "Object" des Hauptmenüs können mit der Option "Add Polygon Object" Polygon-Primitive in der Szene erzeugt werden (Abb. 5).

Abb. 5: Menü, um Polygon-Primitive zu erzeugen
Abb. 6: Die verschiedenen Polygon-Primitive in einer Szene

Dabei stehen Würfel (Cube), Kugeln (Sphere), Zylinder (Cylinder), Kegel (Cone) und rechteckige Ebenen (Plane) zur Auswahl (Abb. 6). Diese Objekte können zu komplexeren Körpern kombiniert werden, um Objekte wie Bäume, Häuser, Wänder etc. anzunähern.

3.2 Modelle importieren

Neben den primitiven Polygon-Objekten können in die Szene komplexe 3D-Modelle importiert werden. Dies geschieht über die Option "Load Model..." im Untermenü "File" des Hauptmenüs (Abb. 7).

Abb. 7: Menü, um komplexe Modelle zu laden
Abb. 8: Die verschiedenen komplexe Modelle in einer Szene

In Abb. 8 sind ein paar Beispiele für derartige Modelle abgebildet. In der aktuellen Version wird als Dateiformat für 3D-Modelle nur das OBJ-Format unterstützt.

3.3 Objekte auswählen

Um ein Objekt der Szene auszuwählen, muss man mit der linken Maustaste auf das jeweilige Objekt in der 3D-Ansicht klicken. Daraufhin wird das angeklickte Objekt durch ein blaues Gitternetz hervorgehoben dargestellt (Abb. 9).

Abb. 9: Ein Beispiel für Objektauswahl - Die rechte Kugel ist ausgewählt und wird durch das blaue Gitternetz optisch hervorgehoben

Neben den in den folgenden Abschnitten beschriebenen Modifikationen an ausgewählten Objekten besteht auch die Möglichkeit, ein ausgewähltes Objekt aus der Szene zu entfernen. Dies geschieht entweder durch Drücken der Entf-Taste oder über den Menüpunkt "Remove Object" in dem Untermenü aus Abb. 5.

3.4 Kameras

Das Programm bietet zusätzlich noch die Möglichkeit, mehrere Kameras in einer Szene zu verwalten. Die geschieht über das Untermenü "Camera" im Hauptmemü (Abb. 10). Darin sind alle existierenden Kameras unter ihrem Namen zu finden. Die Standard-Kamera, die anfangs in der Szene steht, trägt immmer den Namen "Default Perspective". Weitere Kameras erscheinen darunter und können per Mausklick ausgewählt werden. Nachdem eine Kamera ausgewählt wurde, betrachtet der Benutzer die Szene durch deren Blickwinkel und steuert sie entsprechend.

Abb. 10: Menü, um Kameras zu verwalten
Abb. 11: Dialogfenster zur Eingabe des Kameranamens

Über den Menüpunkt "Add Camera..." kann eine neue Kamera zu der Szene hinzugefügt werden. In dem daraufhin erscheinenden Dialogfenster kann der Name der Kamera eingetragen werden, unter dem sie später im Menü erscheinen soll (Abb. 11). Wird als Name nichts eingegeben, so wird die Kamera automatisch nach dem Schema Camera #X (mit aufsteigenden Zahlen für X) benannt. Neue Kameras stehen nach ihrer Erzeugung immer in der Ausgangsposition der Standard-Kamera nach Programmstart.

4 Materialien

Sobald ein Objekt ausgewählt wurde, kann sein Material in der Seitenleiste verändert werden. Dabei wird zwischen texturierten und nicht texturierten Objekten unterschieden. Ob ein Objekt Texturkoordinaten besitzt oder nicht, erkennt der Benutzer daran, dass texturierte Objekte nach dem Laden mit einem Schachbrettmuster überzogen sind.

4.1 Farbe

Jedem Objekt kann eine individuelle Farbe zugewiesen werden. Dazu dient das Farbauswahlwerkzeug aus der Seitenleiste in Abb. 12.

Abb. 12: Das Farbauswahlwerkzeug
Abb. 13: Zwei verschiedene Farb- und Glanzeinstellungen

Unter dem Farbwähler befindet sich ein Vorschaufeld für die ausgewählte Farbe. Über den "Specular"-Schieberegler lässt sich der Glanz des Materials einstellen (Abb. 13).

4.2 Textur

Wenn ein Modell eine Textur hat, kann diese verändert werden. Die Texturoptionen befinden sich in der Seitenleiste unter den Farbeinstellungen (Abb. 14).

Abb. 14: Die Texturoptionen

Über den Haken mit der Beschriftung "Show Texture" kann eingestellt werden, ob das Objekt texturiert dargestellt werden soll (Abb. 15) oder in der einstellbaren Füllfarbe. Durch Setzen des Hakens mit der Beschriftung "Blend Texture" kann die Textur mit der Füllfarbe überblendet werden (Abb. 16).

Abb. 15: Ein texturiertes Objekt
Abb. 16: Eine übergeblendete Textur
Abb. 17: Eine geladene Textur

Über den Kopf mit der Aufschrift "Load Texture..." kann dem ausgewählten Objekt eine Bilddatei von der Festplatte als Textur zugewiesen werden (Abb. 17).

5 Transformationen von Objekten

Ein ausgewähltes Objekt kann auf verschiedene Arten transformiert werden. Es kann verschoben (Translation), gedreht (Rotation) und skaliert (Scale) werden. Diese Transformationen werden entweder per Kopfdruck mit der Tastatur vorgenommen oder in den entsprechenden Eingabefeldern in der Seitenleiste (Abb. 18).

Abb. 18: Eingabefelder für Transformationen

Zudem können in Site3D einzelne Punkte von Objekten verschoben und ihre Gesamtoberfläche geglättet werden. In den folgenden Abschnitten werden diese verschiedenen Operationen im Detail erläutert.

5.1 Verschieben

Die Verschiebung von Objekten kann entlang der x-, y- und z-Achse vorgenommen werden. Allerdings wird hierbei zwischen Welt- und Objekt-Achsen unterschieden (Abb. 19). Sobald ein Objekt gedreht wurde unterscheiden sich seine lokalen Objekt-Achsen von den globalen Welt-Achsen der Gesamtszene (Abb. 20). Da es für beide Arten der Verschiebung Anwendungsfälle gibt, kann in Site3D zwischen ihnen gewechselt werden.

Abb. 19: Objekt-Achsen (ungedreht)
Abb. 20: Objekt-Achsen (gedreht)

Um Objekte mit der Tastaur zu verschieben, werden die vier Pfeil- oder Cursortasten und die Bildauf- und Bildab-Taste benötigt. Mit der linken und rechten Pfeiltaste werden Objekte entlang der x-Achse und mit der oberen und unteren Pfeiltaste in Richtung der z-Achse bewegt. Mit der Bildauf- und Bildab-Taste kann ein Objekt entlang der y-Achse verschoben werden. Wenn man dabei die Shift-Taste gedrückt hält wird das Objekt in Richtung seiner lokalen Objekt-Achsen bewegt.

5.2 Drehen

Die Rotation von Objekten erfolgt immer um die lokalen Achsen eines Objekts. Es kann um alle drei Achsen mit und gegen den Uhrzeigersinn gedreht werden (Abb. 21).

Abb. 21: Rotation um 90 Grad um alle drei Achsen

Diese Drehungen können mit der x- ,y- und z-Taste auf der Tastatur ausgeführt werden. Objekte werden dabei um die Achse des Buchstabens der jeweiligen Taste gedreht. Die Drehrichtung kann durch gleichzeitiges Drücken der Shift-Taste geändert werden.

5.3 Skalieren

Wie bei der Rotation können Objekte in allen drei Dimensionen in beide Richtungen skaliert werden (Abb. 22).

Abb. 22: Skalierung in allen drei Dimensionen auf 150%

Dazu werden die w- (breiter/schmaler), h- (höher/flacher) und d-Taste (dicker/dünner) benötigt. Die Richtung der Skalierung kann, wie bei der Rotation, durch Drücken der Shift-Taste geändert werden. Außerdem besteht die Möglichkeit, ein Objekt insgesamt in allen Dimensionen mit der Plus-Taste zu vergrößern und mit der Minus-Taste zu verkleinern.

5.4 Eckpunkte bewegen

Mit Site3D können Objekte nachträglich modelliert werden, indem man einzelne oder mehrere Eckpunkte der Oberfläche bewegt. Hierzu muss zunächst ein Objekt auf dem zuvor beschriebenen Wege ausgewählt werden. Anschließend kann per Drag&Drop mit der Maus ein Rechteck über den gewünschten Eckpunkten aufgezogen werden, um diese Punkte zu selektieren (Abb. 23).

Abb. 23: Auswahl von Eckpunkten
Abb. 24: Ausgewählte Eckpunkte
Abb. 25: Verschobene Eckpunkte

Ausgewählte Eckpunkte werden als blaue Punkte dargestellt (Abb. 24). Sobald eine Auswahl besteht, können diese Punkte wie Objekte mit der Tastatur bewegt werden (Abb. 25). Auch hier werden die vier Pfeil- oder Cursortasten und die Bildauf- und Bildab-Taste in Kombination mit der Shift-Taste verwendet. Die Verschiebung findet in diesem Fall immer in Richtung der lokalen Objekt-Achsen statt.

5.5 Glätten

Unter den Eingabefeldern für die Transformationen befinden sich die Oberflächeneinstellungen in der Seitenleiste (Abb. 26). Über den Haken mit der Beschriftung "Show Borders" können, falls vorhanden, die Randkanten der Oberfläche eines Objektes angezeigt werden (Abb. 27). Dabei handelt es sich um die Ränder von Löchern in der Oberfläche. Sie werden durch orangene Linien hervorgehoben.

Abb. 26: Die Oberflächeneinstellungen
Abb. 27: Ein Objekt mit markierten Randkanten

Desweiteren kann die Oberfläche eines Objekts durch Drücken des Knopfes mit der Aufschrift "smooth" geglättet werden. Dabei werden grobe Unebenheiten oder Zacken in der Oberfläche reduziert. Auch könnte es mit dem Modellierwerkzeug kombiniert werden, um einen glatteren Übergang von den verschobenen Eckpunkten zu dem restlichen Modell zu erzeugen.

Abb. 28: Objekt ohne Glättung
Abb. 29: Objekt nach einer Glättung
Abb. 30: Objekt nach zwei Glättungen

In Abb. 28 sieht man das 3D-Modell eines Teddybären in seinem Ausgangszustand. Die Auswirkungen der ersten Glättung sind besonders an den Ohren und dem Kopf zu erkennen (Abb. 29). Jede weitere Glättung verstärkt diesen Effekt (Abb. 30). Sehr viele Glättungen lassen das Modell nach und nach förmlich in sich zusammenfallen.

6 Fazit

Mit Site3D ist eine Software entstanden, die grundlegende Funktionen bereitstellt, um 3D-Szenen zu erstellen. Das Programm ist so aufgebaut, dass es relativ einfach in vielerlei Hinsicht erweitert werden könnte. Somit könnte es als Basis für einen komplexen 3D-Modeller dienen, der vergleichbar zu kommerziellen Produkten auf diesem Gebiet wäre. Allerdings wurde auch in dieser Version auf die Bedienbarkeit geachtet, so dass damit bereits einige Anwendungsfälle bearbeitet werden können.