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