VIS- und Uni-Logo
Blindversion home uni university suche search sitemap sitemap kontakt contact
unilogo University of Stuttgart
Institute for Visualization and Interactive Systems

sopra4

german VersionPrintversionBlind Version
 

Sorry, this document is only available in German.

top

Softwarepraktikum

Softwarepraktikum WS 2000
Thema: Visualisierung von Orbitalen
Universität Stuttgart
Fakultät Informatik 
Abteilung Visualisierung und Interaktive Systeme
Prof.Dr.T.Ertl
Betreuer: Klaus Engel
Bearbeiter:
Lachmair, Martin
Mack, Sven
Ruiz, Susana
Votteler, Brendon


Inhalt

Aufgabenstellung
Hintergrund
Lösung
Bedienungsanleitung
Linksammlung
 
 
 

Aufgabenstellung

Umstellung des Web-Services OrbVis zur Orbitalvisualisierung von VRML auf Java3D.
Motivation: VRML97 wird durch das flexiblere X3D (Extensible 3D) abgelöst. In dieser Aufgabe soll die 3D Visualisierung auf X3D/JAVA3D umgestellt werden.
Dazu soll zunächst überprüft werden ob solch ein Service mit den im Augenblick vorhandenen X3D Implementierungen realisierbar ist. Sollte dies nicht der
Fall sein, soll der Service alternativ auf JAVA3D umgestellt werden. Die Manipulation der zu visualisierenden Objekte soll sowohl durch Buttons als auch durch
direkte Interaktion mit der Maus möglich sein. Weiterhin soll der Benutzer verschiedene Einstellungen vornehmen können. So sollen verschiedene Eigenschaften,
wie z.B die Transparenz oder die Größe der Orbitallappen einstellbar sein.
back
 

Hintergrund

VRML bedeutet Virtual Reality Modeling Language. Es ist eine textbasierte Sprache, deren Sourcecode innerhalb eines Browsers nur über ein Plugin

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 ist ein modernes, flexibles API zur dreidimensionalen, scenegraphbasierten Graphikprogrammierung in der Programmiersprache Java, aufbauend auf dem JDK1.2. 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 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?

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

Lösung

Zu Begin stand die Frage welche Alternative zu VRML ausreichende Performance bieten würde.
Die erste Alternative war ein Applet mit dem Namen Blaxxun. Diese Alternative erwies sich als zu langsam und uneffektiv, da in kürzester Zeit bis zu 40000 Dreiecke zu berechnen sind und das Applet hier ungenügende Performance bietet.
Die zweite Alternative bestand in einem X3D-Plugin. Es galt zu klären in wie weit X3D fortgeschritten ist und welche dazugehörende Plugins sein könnten.
Entschieden haben wir uns schließlich für die dritte Alternative: Java3D. Diese bietet gute Performance und ist in Java ideal und einfach integrierbar.

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-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
 

Bedienungsanleitung

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

Linksammlung

Homepage der ChemVis-Services
Homepage von OrbVis
Java3D-Tutorial
Homepage des Web3D-Consortiums
Homepage von Java
contact:
Frank.Oellien@chemie.uni-erlangen.de
engel@informatik.uni-stuttgart.de
back