![]()
dargestelltwerden können. VRML ist für das WWW standardisiert um dort 3D-Szenen darzustellen. VRML beschreibt ( im Unterschied zu HTML ) nicht primär Text und Graphikreferenzen, sondern den vektoriellen Aufbau dreidimensionaler, polygonaler Graphikobjekte und deren Abhängigkeiten in sogenannten Szenegraphen. VRML erlaubt es, dreidimensionale Objekte zu entwerfen, die Verweise auf andere solche Objekte enthalten können.
Java3D[9] ist ein modernes, flexibles API zur dreidimensionalen, scenegraphbasierten Graphikprogrammierung in der Programmiersprache Java, aufbauend auf dem JDK1.2[10]. Java3D ermöglicht die einfache Erstellung und Darstellung von 3D-Objekten, sowie deren Manipulation. Das heisst, das diese Objekte leicht interaktiv bewegt, verändert und beleuchtet werden können.
Java[11] bietet Plattformunabhängigkeit und vereinfacht das Erstellen graphischer Benutzeroberflächen. So fällt unter anderem das umständiche External Authoring Interface (EAI) zur Kommunikation zwischen VRML und Java weg. Entwicklungsumgebung und ausführliche Dokumentation stehen im Internet kostenlos zum download bereit. Momentan wird zur Darstellung einer Java3D-Szene ein Java2-Plugin benötigt mit Java3D als Extension. Die Zukunft verspricht allerdings, daß Java2 komplett in die Browser integriert wird, so daß das Installieren von Plugins wegfällt.
Was ist ORBVIS?[12]
OrbVis ist ein Online-Service der Uni Erlangen zur Erstellung von Molekülen
und anschliessender Berechnung und Visualisierung von deren Orbitalen (MOs).
Der Service visualisiert die Orbitale aller sinnvollen molekularen Strukturen.
Der Benutzer erstellt mit Hilfe eines Editors ein Molekül. Nach Angabe
der Energiestufen auf einer weiteren WebSite wird das Molekül als
sogenanntes Ballstick-Modell vom Server zurückgeliefert und dargestellt.
Dann erfolgt die Berechnung der Orbitalvektoren und schließlich die
Darstellung der Orbitalvolumen um das Ballstick-Modell.
Bild 1 zeigt, wie OrbVis Moleküle und deren Orbitallappen darstellt
und mit welchen Bedienelementen manipuliert werden kann.
Man sieht, daß der Service weitgehend in Englisch gehalten ist.
Zur Benutzung ist zu sagen, daß weiße Felder grundsätlich
manipulierbar sind, graue dagegen nicht.
(Bild 1)
back[13]
[13]
Um in Java3D Graphikobjekte darstellen zu können, muss man sich
zunächst den Aufbau eines Scenegraphobjects klarmachen (Figure 2).
Wie man sieht handelt es sich hierbei um eine baumartige Struktur, die sämtliche Informationen für die Entstehung eines Universums enthält, wie z.B. Beleuchtung (Light), Formen (Shapes), Gruppen (Groups: TransformGroup, SwitchGroup, BranchGroup...), etc... Die Knoten dieses Baumes können manipuliert werden. Manipulationen wirken sich auf alle darunterliegende Teilbäume aus. So entstehen auf relativ einfache Art nahezu unendlich viele Möglichkeiten, das Aussehen von Graphen zu gestalten und zu manipulieren.
Die nächste Problemstellung bestand nun darin VRML-Szenen in Java3D
darzustellen, da der Server der die Ballstick-Modelle liefert bisher nur
VRML- Szenen zur Darstellung von Molekülen bereithält.
Die Lösung hierfür bietet die Java-Klasse VrmlLoader aus
dem Package Vrml97. Diese Klasse erzeugt aus der bestehenden VRML-Szene
eine TransformGroup, die dann problemlos in den Graphen eingehängt
werden kann.
Diese VRML-Szenen stellen die Grundlage zur Berechnung der Raumkoordinaten
der Volumen dar, die die Orbitallappen visualisieren. Die Darstellung eines
Volumens besteht aus einer Vielzahl von Dreiecken deren Koordinaten von
dem sogenannten MarchingCubes[14]-Algorithmus
berechnet werden. Diese Koordinaten werden in einem IndexedTriangleArray
abgelegt, welcher wiederum die Form eines Shapes bestimmt. Zusätzlich
muß für ein Shape zur schönen und fliessenden 3D-Darstellung
zu jedem Dreieck die Normale berechnet werden, wofür in Java3D ein
Normalengenerator bereitsteht. Dieses Shape kann nun in eine TransformGroup
zur weiteren Manipulation, wie z.B. Drehen eingehängt werden.
Ferner wurden verschiedene Anpassungen des Bedienungsapplets notwendig. Wichtig hierbei war vor allem darauf zu achten, daß einerseits die Bedienung für Laien übersichtlich und einfach wird und andererseits möglichst viel Funktionalität für fortgeschrittene User bereitsteht. Realisiert wurde dies mit Cards: Auf den Titel einer Card geklickt öffnet sich das darunterliegende Bedienungselement und man kann so zusätzliche Funktionen nutzen. Mit dem off-Button lässt man das Element dann auch wieder verschwinden (Bild 2).
Ein weiteres Problem war die Sicherung eines angezeigten Moleküls
samt den Orbitallappen (siehe Card "save model"). Um die Sicherheitsbeschränkungen
von Applets zu umgehen, werden die Koordinaten der Dreiecke, welche die
Orbitallappen darstellen, in Strings ausgelesen. Mit diesen Strings wird
dann eine VRML-Szene generiert, welche nun in einer TextArea dargestellt
wird. Der Button SELECT ALL markiert nun den kompletten Textbereich und
man kann mittels STRG-c und STRG-v diesen Text in einen Texteditor pasten.
Hier lässt er sich nun als <name>.wrl abspeichern. Es ist darauf
zu achten, daß es sich um ein ASCII- Textformat beim Abspeichern
handelt. Aufgrund der enormen Datenfülle ist es nun nicht möglich,
Szenen mit sehr großen Volumen so abzuspeichern. Ausserdem dauert
die Stringgenerierung der VRML-Szene relativ lange, da sehr viele und langwierige
Stringoperationen durchgeführt werden müssen. Auch und nicht
nur für diesen Fall existiert die Option "copy slot". Mit ihr lassen
sich 10 verschiedene Darstellungen, bzw. Zustände im Speicher halten.
back[15]
orbitalsize: Mit diesem Slider lässt sich die Grösse
der Orbitallappen bestimmen.
transparence: Dieser Slider bestimmt die Transparenz der Orbitallappen.
immediate update: Ist dieses Feld mit einem Häkchen markiert,
werden die Orbitallappen neu berechnet und dargestellt noch während
die Maus gezogen und bevor die linke Maustaste losgelassen wird.
details: bestimmt die Detailtreue besser gesagt die Auflösung
der Orbitallappen. Hohe Detailtreue bedeutet hoher Rechenaufwand, also
langsamere dafür feinere Darstellung.
advanced orbitalsize: Hier kann die Ausrichtung/Skalierung der
Orbitallappen entlang der 3 verschiedenen Achsen X,Y,Z beeinflusst werden.
Einmal verändert muss mit 'build' die Darstellung neu berechnet werden.
'off' lässt dieses Panel wieder verschwinden.
orbitalsettings: 'show HOMO' zeigt die Highest Occupied Molecule
Orbitals an. 'show LUMO' zeigt die Lowest Unoccupied Molecule Orbitals
an. max triangles legt die maximale Anzahl berechneter Dreiecke fest. Dies
soll den Anwender vor zu langen Berechnungszeiten schützen.
save model: Hier können mit 'copy slot' Zustände temporär
im Arbeitsspeicher gehalten werden und mit 'save slot' Zustände gespeichert
werden. Um Schutzverletzungen zu vermeiden werden die Java3D-Szenen in
ein VRML-Format transformiert und in einem Textfenster dargestellt. Mit
Copy und Paste lässt sich diese nun in eine Textverarbeitung kopieren
und als ASCII-File abspeichern. Es ist darauf zu achten, daß dies
in einer geringen Auflösung geschehen sollte.
Die Maus: Mit der Maus lässt sich die Szene manipulieren.
'Linke Maustaste gedrückt halten und Maus bewegen' dreht das Objekt,
mittlere Taste zoomt und rechte Taste bewegt das Objekt.
back[16]