Java 3D-Chat

Projektidee


Im dritten Semester des Studienganges Internet Science & Technology an der Fachhochschule Kiel steht ein kombiniertes Fach aus JAP (Java Programmierung) und PIN (Programmierung von Internetservern) auf dem "Lehrplan". Einen Teil dieser beiden Fächer stellt eine praktische Arbeit dar, deren Thema aus einem breit gefächerten Angebot relativ frei gewählt werden kann. Zu Beginn der Veranstaltung wurde eine stichwortartige Liste mit diversen Themengebieten vorgestellt, darunter einige, die sich dem Gebiet ""virtuelle Realität" widmeten.

Angeregt durch das Thema "Colaboration in Virtual Environments" machten wir uns Gedaken, wie das Thema virtuelle Realität und Zusammenarbeit im Rahmen des oben genannten Kurses bearbeitet werden könnte. Im Zuge der Überlegungen stellten sich aus unserer Sicht drei zentrale Punkte heraus: virtuelle Realität erfordert vor allem eine 3-dimensionale Darstellung in Echtzeit, da die visuelle die wichtigste menschliche Sinneswahrnehmung ist und unser Umgebung sowohl 3-dimensional, als auch bewegt ist. Ein weiterer wichtiger Faktor betrifft das Stichwort Zusammenarbeit: Grundlage dafür ist Kommunikation auf Applikations- und auch auf Benutzerebene. Der dritte für unser Projekt wichtige Punkt betrifft die unmittelbare Realisierung, diese sollte auch dem Kurs "Javaprogrammierung" Rechnung tragen, was konkret bedeutet, dass die Umsetzung der Projektarbeit in Java erfolgen sollte.

Zusammenfassung: es galt also in Java eine Applikation zu erstellen, die Kommunikation mit einer virtuellen 3D-Umgebung kombiniert. Wir entschieden uns daher eine Art virtuellen Treffpunkt zu implementieren, welcher es mehreren, örtlich voneinander getrennten Anwendern gestattet, Textnachrichten auszutauschen. Also einen 3D-Chat.

Es ist uns natürlich bewusst, dass das Austauschen von Textnachrichten allein wenig mit Zusammenarbeit gemein hat und auch nicht auf die Darstellung einer virtuellen Umgebung angewiesen ist. Da das Projekt jedoch in einem realisierbaren Rahmen bleiben sollte und ein virtueller Treffpunkt viele technische Voraussetzungen für Zusammenarbeit in virtuellen Umgebungen erfüllt, erachten wir ein wie zuvor beschriebenes Projekt für diesen Kurs als ausreichend und angemessen. Dies gilt umsomehr, da die Kommunikation und die Steuerung der Anwendung über räumliche Grenzen hinweg auf Datenübertragung via Internet angewiesen ist und eben die "Programmierung von Internetservern" (sowie Clients) erfordert.

Gedanken zur Realisierung


Definieren wir an dieser Stelle zunächst noch einmal exakt die Anforderungen, die die geplante Anwendung erfüllen soll: Die Anwendung soll auf dem Bildschirm eines PC's eine 3-dimensionale Umgebung im Fenster- oder Vollbildmodus darstellen. In dieser Umgebung soll sich der Anwender - repräsentiert durch einen Avatar - mittels Tastatureingabe frei bewegen können. Des Weiteren soll dem Benutzer durch ein integriertes Benutzerinterface (GUI) die Möglichkeit gegeben werden, sich mit einem bestimmten Server zu verbinden. Ist eine Verbindung hergestellt worden, sollen alle anderen Teilnehmer ebenfalls durch Avatare dargestellt werden; dies umfasst auch ihre Bewegungen im 3-dimensionalen Raum. Die Eingabe der zu versendenden Textnachrichten soll ebenfalls über ein GUI erfolgen. Nach der Übertragung sollen die Nachrichten in einer Art Logfenster und zudem über dem Avatar des jeweiligen Gegenüber dargestellt werden.

Wie und unter Verwendung welcher technischen Hilfsmittel kann nun also ein solches Projekt realisiert werden? Da ist zunächst einmal die 3-dimensionale Darstellung. Will man die Fähigkeiten moderner Grafikkarten ausnutzen, so gibt es zwei Schnittstellen, die einem den Zugang zu dieser Hardware erschließen: OpenGL und DirectX. Da letztere nur unter Windows-Betriebssystemen vorhanden ist, würde man durch die Verwendung von DirectX die Plattformunabhängigkeit von Java über Bord werfen. Bleibt also nur OpenGL. OpenGL ist auf den meisten Sytemen in form von C-Headerdateien und Bibliotheken (dll- oder so-Dateien) vorhanden, die meist mit den Treibern der Grafikkartenhersteller ausgeliefert werden. Da OpenGL eine "low level"-Schnittstelle ist, die Programmierung auf dieser Ebene sich als alles andere als trivial gestalltet und wie erwähnt nur den Programmiersprachen C und C++ zugänglich ist, wird für die Umsetzung des Projektes eine Javabibliothek (Grafikengine, Grafik-API) benötigt. Dazu später mehr.

Neben der Darstellung im 3-dimensionalen Raum ist auch die Bewegung in selbigen von grosser Bedeutung. Schliesslich sollen sich die dargestellten Objekte relativ natürlich verhalten - der Avatar sollte nicht durch die "Luft" schweben - nicht durch massive Bestandteile der Welt hindurchgehen und Fallen wenn er keinen festen Boden unter den Füssen hat. Kurz, die grundlegenden physikalischen Eigenschaften wie Gravitation und Kollision sollen rudimentär simuliert werden. Auch hierfür gibt es APIs, welche dem Programmierer solche Simulationen vereinfachen sollen - sogenannte Physikengines. Und dann ist da noch die Datenübertragung über das Internet, hierfür bietet die Klassenbibliothek von Java schon vielerlei Hilfsmittel in den Paketen java.io und java.nio. Mit diesen ließe sich die Übertragung bewerkstelligen. Die Daten müssten dan "nur" noch in der Anwendung verarbeitet werden.

Wichtig ist aber nicht nur das "Wie?" sondern auch das "Was?", die Avatare selbst müssen beispielsweise in Form von 3D-Modellen vorhanden sein, um überhaupt dargestellt werden zu können. Für die Erstellung solcher Modelle gibt es spezielle Sofware, diese verlangt dem Anwender nicht nur Übung und Geschicklichkeit, sonder auch ein gewisses Maß an künstlerischen und kreativen Fähigkeiten ab. An dieser Stelle sei erwähnt, dass wir uns letzteres nur sehr bedingt zugestehen würden.

Zur Vorbereitung auf das Projekt, musste nun also erstmal ermittelt werden, welche Hilfsmittel für die oben vorgestellten Gesichtspunkte zur Verfügung stehen. Optimal wäre, eine günstige oder sogar freie 3D-Engine zu finden, die schon physikalische Berechnungen sowie Netzwerkunterstützung bietet und zudem in Java entwickelt worden ist.