slideshow image


Projektbearbeitung - Die einzelnen Schritte

(klicke auf Bilder, um sie zu vergrößern)

Schritt 1: Projekteröffnung in Microsoft Visual Studio 2010

Zu Beginn des Projekts stand die Entscheidung für eine geeignete Entwicklungsumgebung im Vordergrund. Dabei entschied ich mich auf jene zurückzugreifen, mit welcher ich bereits zuvor bei der Programmierung in C++ Erfahrung gesammelt hatte: Visual Studio 2010 von Microsoft. Auch, wenn diese gerne dazu verleitet, Programme auf Win32-Basis zu entwickeln und dabei auf Win32 API zurückzugreifen, so fokusierte ich darauf das Endprodukt auf unterschiedlichen Betriebssystemen problemlos laufen lassen zu können.

Wie auf dem obigen Bild deutlich wird, sind vor dem eigentlichen Programmieren einige Vorkehrungen zu treffen. Aufgrund der Tatsache, dass OpenGL zusammen mit GLUT die Grundlage für 3D-Modellierungen bilden sollte, mussten etwa dementsprechend benötigte Libraries wie opengl32.lib oder glut32.lib korrekt verlinkt bzw. eingebunden werden.

Schritt 2: Einarbeitung in OpenGL

Beinahe unabdingbar für das erfolgreiche Arbeiten mit OpenGL ist aufgrund der vielfältigen Möglichkeiten, die einem Entwickler damit zur Verfügung stehen, das Einarbeiten mithilfe verschiedener Tutorials. Einen sehr guten und relativ einfachen Einstieg ermöglicht dabei das Angebot an Tutorials seitens NeHe Productions. Dort werden Neueinsteiger in verschiedenen Bereichen geschult, die für die Erschaffung von 3D-Welten immer wiederkehren und benötigt werden. Demnach ist Know-how über das Zeichnen sowie Texturieren diverser Grundformen wie etwa Rechtecken je nach Gestaltungswunsch Bedingung, um beispielsweise einen 3D-Raum, der sich schließlich aus 4 Wänden, einer Decke sowie einem Boden, also aus 6 Rechtecken, zusammensetzt, zu gestalten.


Dieses Code-Beispiel illustriert beispielsweise die Verwendung von Raumpunkten (= Vertices), um die Form des Bodens und damit die Grundfläche des flexibel gestaltbaren Raumes festzulegen.

Schritt 3: Programmierstart

Nachdem ausreichend Kenntnisse angeeignet wurden, um das Projekt auch programmiertechnisch in Angriff nehmen zu können, machte ich mich mit einem Beispielcode von Dr. Susanne Krömker vertraut, der als Grundlage meines zu entwickelnden Programmes dienen sollte. Der Beispielcode beinhaltete einen Spiegel sowie eine Teekanne, die in diesem gespiegelt wurde.

Von nun an hieß es: Ergänzen, ergänzen, ergänzen!

Wie bereits beschrieben, lautete die Aufgabe:

  • Entwurf eines flexibel anpassbaren 3D-Modells der Raumsituation des Bildes "Las Meninas"
  • Reflexion des im Gemälde gezeigten Bildes im Spiegel (Einfallswinkel = Ausfallswinkel)
  • Anpassungsmöglichkeit des Raummodells an die Sichtbarkeit einzelner Personengruppen
  • Blickrotationsmöglichkeit

Es folgte u.a. das Zeichnen des Raumes, des Bildes oder des Spiegels .

Schritt 4: User Interface

Die Notwendigkeit eines flexibel gestaltbaren/anpassbaren 3D-Modells der Las-Meninas-Raumsituation erforderte grundsätzlich eine sinnvolle Bedienungsmöglichkeit zur Veränderung des "Gezeichneten".

Daher entschied ich mich nach einiger Recherche für GLUI (=OpenGL User Interface Library), einer C++ User Interface Bibliothek, welche vorteilhafterweise auf GLUT basiert. Diese bietet die Möglichkeit ein Optionsfenster, zusammengesetzt aus Buttons, Checkboxen, Textfeldern und Spinnern inkl. stets veränderbarer Livevariablen zu kreieren, wovon ich schließlich in meinem Programm ausreichend Gebrauch machte.

Wie die nachfolgenden Screenshots inklusive eines Beispielquellcodes aus meinem Quelltext verdeutlichen sollen, können im Endprodukt dieses Projekts folgende Einstellungen vorgenommen werden:

  • Veränderungen der Raumbreite, Raumtiefe, Raumhöhe inklusive diverser Möglichkeiten zur Feinskalierung und einer Rücksetzmöglichkeit auf Defaultwerte, die den Berechnungen von John F. Moffitt (externer Link zu Wikipedia) entsprechen.
  • Hinzufügbarkeit und Veränderbarkeit (u.a. der Position oder Höhe) von Türen
  • Veränderbarkeit der Spiegelpositionierung, Spiegelbreite/-höhe
  • Diverse Bild-Einstellungsmöglichkeiten (u.a. Position, Höhe), wobei insbesondere die Drehbarkeit des Bildes hervorzuheben ist
  • Die Wahlmöglichkeit unterschiedlicher Blickpositionen mithilfe von Buttons, wobei neben einem Setup-Blick, der das übersichtliche Verändern der Raumgrößte etc. ermöglichen soll, auch eine individuelle Blickposition seitens des Benutzers eingestellt werden kann
  • Diverse Rücksetzmöglichkeiten, beispielsweise die komplette Rücksetzung aller Werte auf Defaultwerte
  • Um die Übersichtlichkeit zu wahren, wurden ausklappbare Optionsuntermenüs implementiert

Ebenfalls ein wichtiges Feature ist - stark damit zusammenhängend - eine Übersichts-Chart, d.h. ein "Control Center", welcher sich in einem zusätzlich hinzuprogrammierten Fenster befindet und eine Übersicht über die eingestellten Größen bietet. Dabei wurde die Einheit "Meter" (m) gewählt.
 

GLUI-Beispielcode für Raum-Optionen.

Schritt 5: Hilfsfenster, Blickwinkel, Rotieren, Laufen

Wie auf den unten aufgelisteten Screenshots verdeutlicht werden soll, wurde mithilfe der Verwendung von Matrizen (glPushMatrix, glPopMatrix...) das Programm in jener Hinsicht erweitert, sodass folgende Funktionen integriert werden konnten:

  • Laufen (nach vorne, nach hinten, nach links, nach rechts)
  • Veränderung der Blickpositionen (Setup-Position, Maler-Position, Kind-Position, individuelle Nutzer-Position)
  • Drehbarkeit der aktuellen Blickposition nach links, rechts, oben und unten
  • Rotierbarkeit des 3D-Modells
  • Zoombarkeit des 3D-Modells


Zudem besteht die Möglichkeit, Informationen darüber zu erhalten, welche Tasten für die tatsächliche Ausführung der genannten Funktionen in der Praxis betätigt werden müssen. Über Tastendruck öffnet sich ein Hilfspanel, das dem Benutzer diesbezüglich eine Übersicht gibt. Ein weiterer Tastendruck lässt das Hilfsfenster wieder schließen.

Das obige Bild zeigt:
Default-Zustand des Programms direkt nach dem Programmstart mit geschlossenem Hilfspanel.

Das obige Bild zeigt:
Default-Zustand des Programms direkt nach dem Programmstart mit geöffnetem Hilfspanel.

Das obige Bild zeigt:
Einfache Veränderbarkeit des 3D-Raummodells an gewünschte Raummaße.

Das obige Bild zeigt:
Blickpositionsveränderbarkeit mithilfe von Buttons. Im Spiegel ist die Reflexion des Bildes zu erkennen.

Das obige Bild zeigt:
Mithilfe der "Walking"-Funktion ist es möglich, an beliebige Orte der 3D-Welt zu laufen.

Das obige Bild zeigt:
Der Blick ist grundsätzlich drehbar.


Das obige Bild zeigt:
Auch das Bild selbst ist in beide Richtungen drehbar.

Projekt
Autor