Dune ist ein graphischer VRML97 Editor und ein Animationwerkzeug in
Entwicklung.
Es kann ein VRML97 file lesen, stellt dessen Szenengraph dar und
erlaubt es dem Benutzer, den Szenengraph, die Fieldwerte und Routes zu
verändern.
Dune kann benutzt werden, um einfache
Animationen und Interaktionen in VRML97 zu erstellen.
Als 3D Modelling Werkzeug ist es in der Regel ungeeignet. Es ist
sinnvoll, zusätzlich einen statischen 3D Modeller mit VRML97 Export
(wie z.B. wings3D oder Art Of Illusion) einzusetzen.
Im Gegensatz zu vielen 3D Modellern basiert das Beleuchtungsmodell von Dune
auf den VRML97 Standard und kann deshalb benutzt werden, um deren
exportierten VRML97 files nachzubeareiten.
Dune ist ein Lowlevel Werkzeug zum Bearbeiten von VRML97 Files.
Dabei wird angenommen, dass dem Benutzer die grundlegende
Struktur von VRML97 bekannt ist.
Nährere Informationen findet
man dazu (ausser in einer Anzahl entsprechender Bücher) in der
offiziellen ISO Spezifikation unter
http://www.web3d.org/technicalinfo/specifications/vrml97/index.htm
Für die Benutzung von Dune ist vor allem die Node Referenz
http://www.web3d.org/technicalinfo/specifications/vrml97/part1/nodesRef.html
wichtig.

Neben diversen Toolbars für Icons und Nachrichten besteht "dune" im
wesentlichen aus 5 Fenstern. Ausser dem "3D Preview" Fenster lassen
sich die Fenster über den Menüpunkt
"View" angepasst an den jeweiligen Arbeitsschritt
ein- und ausschalten.
-
Scene Tree
Dieses Fenster enthält den Szenengraphen, und zeigt damit
die Struktur einer VRML Datei, die Information, wie
einzelne VRML Nodes (Knoten) angeordnet sind.
Weitere Informationen
über den Szenengraph finden Sie im Internet unter
http://www.csv.ica.uni-stuttgart.de/vrml/linuxtag/#scenengraph
-
Field View
Dieses Fenster enthält die Fieldwerte, die Zahlen
(bzw. Zeichenketten usw.) in einer VRML Datei. Angezeigt
werden jeweils die Fields des zuletzt ausgewählten
Knoten.
-
Route View
Dieses Fenster enthält die ROUTE's, die
Informationswege mit denen sich verschiedene
VRML Knoten beim Programmlauf verschiedene Nachrichten
schicken können.
-
Channel View
Dieses Fenster beschäftigt sich ausschliesslich
mit Interpolatorknoten. Interpolatorknoten sind in VRML97
vor allem wichtig für Animationen.
-
3D Preview
Dieses Fenster lässt sich nicht abschalten und
zeigt eine Vorschau auf die graphische Darstellung
des VRML Files. Im Gegensatz zu den anderen Fenstern
ist im entsprechenden Programmteil die Umsetzung
des VRML97 Standards noch sehr lückenhaft.
Einige Knotentypen wie "Extrusion", "PointSet", "Inline",
"Background", selbst definierte "PROTO", "EXTERNPROTO"
werden überhaupt nicht dargestellt und bei einigen
Knotentypen wie beim "Text" Knoten unter Unix ist
die Umsetzung als "erst mal besser als gar nichts"
zu verstehen.
Es sind auch nicht alle Fieldwerte richtig dargestellt.
Am auffälligsten ist der Fehler bei "ColorPerVertex"
und "NormalPerVertex" Fieldwerten beim häufig
auftretenden "IndexedFaceSet" (aus Einzelflächen
zusammengesetzter Körper):

Korrekte und fehlerhafte Darstellung eines IndexedFaceSet
bei "ColorPerVertex false" in Cosmoworlds/Cosmoplayer (links)
und Dune (rechts)

Korrektere Darstellung eines IndexedFaceSet
bei "ColorPerVertexflag true" in Cosmoworlds/Cosmoplayer (links)
und Dune (rechts)
Ein vergleichbares Problem tritt bei "NormalPerVertex" auf.
"NormalPerVertex" beeinflusst die Beleuchtungsberechnung
(Schattierung) von Objekten.
Natürlich bedeutet eine solche falsche Darstellung im 3D Preview
eines
eingelesenen VRML Objekts nicht, dass sich ein Fehler in der eingelesenen
VRML Datei befindet.
Mit File->Preview kann man im Zweifelsfall zum Vergleich
einen VRML Browser starten.
Einen neuen
VRML node mit eine Mausklick auf das entsprechenden Icon
hinzufügen ist der einfachste Weg, den Szenengraph zu ändern.
Um ein VRML node zu identifizieren, bewegen Sie den Mousezeiger über
das Icon und warten Sie kurz. Ein beschreibender Text wird auf der
status bar am unteren Ende des Fensters erscheinen.
Dune versucht, entweder den neuen node am blau untermalten Selektionspunkt des
Szenengraph

oder am root node des Scenengraph ("Scene" Icon) einzufügen.
Dune graut alle node Icons aus, die nicht eingefügt werden können.

Die folgende Tabelle zeigt die Anforderung für die entsprechenden
Knoten im VRML97 Standard:
Appearence braucht Shape
Material braucht Appearence
ImageTexture braucht Appearence
MovieTexture braucht Appearence
PixelTexture braucht Appearence
TextureTransform braucht Appearence
FontStyle braucht Text
Coordinate braucht IndexFaceSet or IndexedLineSet or PointSet
Color braucht IndexFaceSet or IndexedLineSet or PointSet
Normal braucht IndexFaceSet
TextureCoordinate braucht IndexFaceSet
AudioClip braucht Sound
So muss zum Beispiel ein Appearence Knoten selektiert sein, damit ein
ImageTexture Knoten eingefügt werden kann, oder ein Shape Knoten
selektiert sein, damit ein Appearence Knoten eingefügt werden kann.
Alle die entsprechenden Felder im VRML97 Standard sind vom Datentyp
SFNode, deshalb kann nur ein Knoten eingefügt werden.
Deshalb wird ein Icon auch dann ausgegräut, wenn schon ein
entsprechender Knoten vorhanden ist.
Zum Beispiel können keine zwei ImageTexture Knoten zu einem
Appearence Knoten hinzugefüt werden.
Deswegen ist das ImageTexture Icon ebenfalls ausgegraut,
wenn ein Appearence Knote selektiert wird, aber ein ImageTexture Knoten
schon vorhanden ist.
Ein anderer Weg, den Szenengraph zu verändern, ist Teile davon mit
der Maus herumzuschieben.
Dune zeigt das Icon eines Stopschildes,
wenn der Ziel node dies nicht erlaubt.

Wenn der Ziel node es erlaubt, benutzt dune den normalen Mauszeiger.

ROUTEs werden in dune angelegt, indem man das entsprechende Icon
im RouteView Fenster findet (klicken auf die Icons selektiert die
entsprechenden Icons im Scene Tree Fenster), auf die Kästchen
für die Events klickt. Dabei wird der Name des Events angezeigt
und es lässt sich eine Linie zum nächsten Icon/Event ziehen.

Es können (wie im VRML Standard verlangt) nur Events mit gleichen
Datentypen (gleiche Farbe der Kästchen) gelegt werden.
Zum Löschen der ROUTEs kann die Linie einfach durchgestrichen
werden.


Es gibt mehrere Möglichkeiten, Fieldwerte zu verändern:
-
Tastatureingabe
Über das klicken mit der Maus auf den entsprechenden Wert
und dem Loslassen der Maustaste. Dann öffnet sich ein
Texteingabefenster und man kann Werte über die Tastatur eingeben.
-
Mauseingabe
Über das klicken mit der Maus auf den entsprechenden Wert,
dem Festhalten der Maustaste und der Bewegung des Mauszeigers nach
links oder rechts. Dies erhöht oder erniedrigt den Wert.

Die Veränderung von Fieldwerten ist noch nicht komplett implementiert
für "MF Fields" (mehrfache Fields). "MF Fields" sind die Fields, die
über das "+" Zeichen geöffnet werden.
-
Fieldwerte verändern im 3D Preview Fenster
Veränderungen im 3D Preview Fenster bedeuten auch eine
Veränderung der
Fieldwerte. Hauptsächlich wird dabei ein Transformknoten
verändert.
Mit den Werkzeugen
legen Sie beim interaktiven
Arbeiten fest, ob das Arbeit mit der Maus auf einem Transformknoten
eine
- Verschiebung
- Drehung
- Skalierung
- Mittelpunktsverschiebung
(neu in Version 0.19beta)
aktiviert wird.
Beachten Sie, dass Sie diese Werkzeuge nicht benutzen
können, wenn kein Transformknoten
im entsprechenden Zweig
des Szenengraphs vorhanden ist.
Ausser dem Transformknoten können auch andere Fieldwerte im 3D
Preview Fenster
verändert werden. Dabei lassen sich kleine weisse Kästchen
verschieben, wie z.B. bei ElevationGrid, PointLight, Box oder beim
VRML200x NurbSurface Node.
-
6D Input (neu in Version 0.19beta)
Seit Version 0.19beta unterstützt Dune 6D Eingabegeräte
(6D bezieht sich auf die 6 Freiheitsgrade) unter Unix/Linux.
Ist ein 6D Eingabegerät konfiguriert und das Icon
gedrückt, kann ein Transform-Knoten
(und die darin enthaltenen Objekte) in allen 6 Freiheitsgraden bewegt
werden. Das Icon
beschränkt sich auf
Verschiebung, das Icon
auf Drehung.
Das klassische
6D Eingabegerät
ist der Spaceball, eine Art Joystick, der nur kleine Auslenkungen erlaubt,
diese aber in alle Raumrichtungen, einschliesslich Drehungen.

Drückt man zum Beispiel auf den Spaceball, bewegt sich das Objekt
nach unten. Verdreht man den Spaceball, folgt das Objekt dieser
Bewegung.
Die Konfiguration der 6D Eingabegeräte funktioniert (noch)
ausschliesslich über Kommandozeilenparameter. Dabei
muss neben der Art des Eingabegeräts auch die Skalierung
(Multiplikation) der Eingabewerte angegeben werden, zum Beispiel:
dune -xinput spaceball -allxyz=20,200 -allrot=40,400
Ausser der Unterstützung über das Xinput Protokoll werden
Spaceballgeräte
auch über Linux Joystick und libsball unterstützt. Details zu
den Kommandozeilenparametern sind in der
man page zu finden.
Ein anderes 6D Eingabegerät sind sogenannte Dials (verfügbar
z.B. unter SGI IRIX).
In der Defaulteinstellung sind die Eingabeachsen etwas ungünstig
angeordnet

Über Kommandozeilenparameter
dune -xinput dialbox-1 -x=0 -y=2 -z=4 -xrot=1 -yrot=3 -zrot=5 -all=100,100,wheel
lassen sich die Achsen vertauschen.

-
6D Local Mode Input: Kennen Sie Funkfernsteuerungen? (neu in Version 0.19beta)
Ist das 6D Local Icon
gedrückt, so kann man damit
die lokalen Achsen eines Transformknoten steuern.
Bewegt man zum
Beispiel einen Spaceball in z-Richtung ("in den Schirm hinein", so bewegt
sich der Transformknoten (und die enthaltenen Objekte) in Richtung seiner
lokalen Z-Achse, folgt also der Richtung des blauen Z-Pfeils.
Bewegt man zum
Beispiel einen Spaceball in y-Richtung ("nach oben", so bewegt
sich der Transformknoten (und die enthaltenen Objekte) in Richtung seiner
lokalen Z-Achse, folgt also der Richtung des grünen Y-Pfeils.

Das kann sehr sinnvoll sein, wenn man Objekt und Transformknoten
entsprechend anordnet. Im Normalfall liegt allerdings ein Objekt
nicht in der Richtung der Pfeile seines Transformknotens,

deshalb sollte dieser Transformknoten in einen anderen Transformknoten
gepackt werden und dann der Transformknoten des Objekts entsprechend
gedreht werden, so dass die Pfeile des neue Transformknotens in
Richtung des Objekts liegt.


Bei der Benutzung zeigt sich ein Effekt, der für Benutzer von
funkgesteuerten Modellflugzeugen keine Überraschung darstellt:
kommt das Objekt "auf einen zu", führt eine Rollbewegung des
Spaceballs nach links zu einer Rollbewegung des Objekts nach rechts.
Ein ähnlicher Bewegungsmodus ist der rocket
(Racketen) Modus. Im rocket modus, sind Verschiebungen nur in der
lokalen Z-Richtung erlaubt.
Das is nützlich, um ein Object entlang eines Pfades zu steuern
und dabei alle Drehungen zu erlauben.
Ein anderer ähnlicher Bewegungsmodus ist der hover
(schwebe) Modus. Im hover modus, sind Drehungen nur um die lokale
y-Achse erlaubt.
Das is nützlich, um ein Object auf einer Ebene zu steuern.
Andere Bewegungsmodi, die im lokalen Modus arbeiten (Änderungen nur
in Richtung der lokalen Achsen), sind der scale
(Skalierung) und changing center
(Zentrum
verändern) Modus.
-
Linux joystick Input:
Leider sind 6D Eingabegeräte nicht besonders verbreitet.
Deshalb bietet white_dune unter Linux Support für joysticks an.
Eine ganze Anzahl unterschiedlicher Geräte (darunter auch der Spaceball)
kann unter Linux als Joystick angesprochen werden.
Dabei muss man 6D (z.B. Labtec Spaceball), 4D (z.B. Gamepads mit 2
Daumensticks), 3D (z.B. Joystick mit Drehgriff
(z.B. Micro$oft Sidewinder Pro))
und "normale" 2D joysticks unterscheiden.
-
6D Joysticks (z.B. Labtec Spaceball) sind wie alle anderen 6D
Eingabegeräte zu behandeln.
-
4D Joysticks (z.B. Gamepads mit 2 Daumensticks) erlauben keinen 6D und
6D Local Modus. Ausser Verschiebung
,
Drehung
, Skalierung
und
Mittelpunktsverschiebung
unterstützen sie noch
hover
(schwebe) Modus und rocket
(Racketen) Modus.
Dabei werden je nach Modus Rotation und Verschiebung auf die
entsprechenden Achsen gelegt.
-
Bei 3D Joysticks (z.B. Joystick mit Drehgriff)
ist die Lage etwas komplizierter. In der default Einstellung erzeugt
eine Eingabe über die dritte Achse (also eine Drehung am Griff)
eine Bewegung in Richtung der z-Achse.
-
Beim 2D Joystick stehen nicht genügend Achsen für
eine 3D Eingabe zur Verfügung. Deshalb muss zwischen
einer Interpretation der 2. Achse als z-Richtung (near/far
(nah-fern) Modus) und als y-Richtung
(up/down
(oben-unten) Modus) über die
Icons umgeschaltet werden.
Bei Drehungen bedeutet der near/far
(nah-fern)
Modus eine Drehung um die y-Achse, der up/down
(oben-unten) Modus eine Drehung um die z-Achse.
-
Der rocket
(Racketen) Modus benötigt eigentlich
4 Achsen. Damit er mit einem 3D joystick benutzt werden kann, wird
hier ebenfalls die Drehungsinformation des near/far
(nah-fern) Modus und up/down
(oben-unten) Modus benutzt.
Beim 2D Joystick steht der rocket
(Racketen) Modus
nicht zur Verfügung.
Es kommt vor, dass bei eine Joystick-Achse wenig brauchbar erscheint
(wie z.B. beim Micro$oft Sidewinder Pro der Schubregler).

Deshalb kann die Anzahl der Achsen beschränkt werden. Um z.B.
den Micro$oft Sidewinder Pro als 3-achsigen Joystick zu behandeln,
kann man die -axes -Option in der Kommandozeile benutzen.
dune -joystick /dev/input/js0 -axes=3
Gamepads sind häufig mit wenig sinnvollen Achsen überfrachtet.
Das Logitech Wingman Cordless Gamepad meldet zum Beispiel beim Test mit dem
jstest Programm 9 Achsen. Um die 6 sinnvollen Achsen
(2 Daumensticks und das Eingabekreuz) sinnvoll einzusetzen, muss die
Achsenzuordnung in der Kommandozeile verändert werden.
dune -joystick /dev/input/js0 -y=4 -z=-1 -xrot=6 -yrot=3 -zrot=5
Dabei bedeutet die Angabe "-z=-1" dass die z-Achse auf die Achse Nummer
1 (also die 2. Achse, da die Zählung bei 0 beginnt) gelegt wird,
die Eingaberichtung aber umgedreht wird.
-
Fieldwerte verändern im ChannelView Window
Das ChannelView Window wird zur Anzeige oder Veränderung von
Interpolator-Knoten
benutzt. Bei einem Interpolator-Knoten sind Eingabewerten zwischen 0 und 1
eine Reihe von Ausgabewerten zugeordnet.
Interpolatoren werden in VRML bei einfachen Animationen in der Form
ROUTE TimeSensorDEFNAME.fraction_changed TO ???InterpolatorDEFNAME.set_fraction
ROUTE ???InterpolatorDEFNAME.value_changed TO ???DEFNAME.set_???
verwendet. Der Ausgang "fraction_changed" eines TimeSensor-Knoten
(der Werte zwischen 0 und 1 liefert) wird dabei in den "set_fraction"
Eingang eines Interpolator-Knoten geleitet. Der Interpolator-Knoten
wählt einen passenden Zwischenwert der Ausgabewerten, der
in andere VRML-Knoten geleitet werden kann, so dass
eine Animation ruckfrei abläft.
Im folgenden Beispiel:

wird die Ausgabe eines PositionInterpolators mit den Eingabewerten
0, 0.3, 1 und den Ausgabewerten x=1/y=0/z=3, x=1/y=2/z=3, x=3/y=3/z=0
auf den set_translation Eingang eines Transform-Knotens (also eine
Verschiebung) geleitet. Das bedeutet, dass sich der Transform-Knoten
(und der darin enthaltene Körper) bei Zeitzykluswerten zwischen
0 und 0.3 von y=0 nach y=2 (also nach oben) bewegt.
Einige der in dune benutzbaren Interpolatoren werden (noch) nicht
unterstützt, sie sind wegen der Masse der Daten in der Regel nur
schwer einzugeben.
-
Einfach benutzbar:
-
ColorInterpolator:
Interpoliert zwischen Farben.
Farben finden sich z.B. bei Shape->Appearance->Material
-
PositionInterpolator:
Interpoliert zwischen Positionen.
Ziel kann z.B. Transform.set_translation sein.
-
OrientationInterpolator:
Interpoliert zwischen Drehungen.
Ziel kann z.B. Transform.set_rotation sein.
-
ScalarInterpolator:
Interpoliert zwischen einzelnen Zahlen.
Einzelne Zahlen kommen oft in Knoten als EventIn vor.
Daher gibt es viele Verwendungsmöglichkeiten.
-
Zur Zeit noch nicht unterstützt, weil sie einen Hang zum Datenwald
haben:
-
CoordinateInterpolator:
Interpoliert zwischen den Positionen von Punkten eines IndexFaceSet.
Das heisst das pro Punkt eines zusammengesetzten
Körpers und Zeitschritt ein 3D Vektor Wert eingetragen werden muss.
Animationen mit der Hilfe des CoordinateInterpolator nennt man
"Morphing".
-
NormalInterpolator:
Interpoliert zwischen den Oberflächennormalen eines
aus Einzelflaechen zusammengesetzten Körpers.
Das heisst das pro Punkt (oder Polygon) eines zusammengesetzten
Körpers und Zeitschritt ein 3D Vektor Wert eingetragen werden muss.
Bestimmte einfache Interpolator-Animationen könnnen in
Dune auch über Veränderungen im 3D Preview Fenster erstellt werden.
PositionInterpolator/Transform.set_translation
und OrientationInterpolator/Transform.set_rotation basierte
Animationen können auch über die Aufnahme von 6D
Eingabegeräten eingegeben werden.
Damit mit den Werkzeugen
wie mit einem Kassettenrecorder Animationen aufgenommen und abgespielt
werden können sind folgende Vorraussetzungen nötig:
Wird nur das Aufnahmeicon gedrückt
,
muss der Zeitcursor jeweils verändert
werden und danach der entsprechende Wert (über Tastatur, Maus oder
6D Eingabegerät) verändert werden.
Wird das Aufnahmeicon zusammen mit dem Abspielicon gedrückt
, wird dauernd die Veränderung der Werte
(durch Mauseingabe oder 6D Eingabegerät)
aufgenommen.
-
Farbkreis (neu in Version 0.19beta)
Für Farbwerte gibt es einen spezielles Eingabefenster, das an die
Stelle des FieldView Fensters tritt, wenn darin ein Farbwert
ausgewählt ist und das Colorcircle Icon gedrückt ist.

Im Farbkreis kann man dann mit einem Mausklick eine bestimmte Farbe
und im Farbbalken daneben anschliessend eine dunklere Variante
auswählen.

Der Aufbau des Farbkreises ist zur Zeit noch ziemlich langsam, wenn unter
Unix/Linux kein True/Directcolor Display zur Verfügung steht...
Über den "OK" Button kehrt man zum normalen FieldView Fenster
zurück.
Um im 3D Preview Fenster navigieren zu können steht zur Verfügung:
-
Shift-Mouse 1: Zoom View
-
ctrl-Mouse 1: Rotate View
zusätzlich steht ab der Version 0.16 eine SGI artige Navigation
zur Verfügung. Bitte beachten Sie, dass ein fehlkonfigurierter
Windowmanager diese Eingaben für seine eigenen Zwecke interpretieren
könnte...
-
Alt-Mouse1: Rotate View
-
Alt-Mouse2: Move View
-
Alt-Mouse1-Mouse2: Zoom View
Statt dem Gedrückthalten der Alt-Taste steht ab version 0.19beta
auch das Icon
zur Verfügung.
Ist ein 6D Eingabegerät aktiv, kann bei angewähltem
Scene-Icon
im Scene Tree Fenster
je nach der Auswahl der Transformicons
durch das VRML File navigiert werden.
Dune ist noch in der Entwicklungsphase und es läuft noch nicht so
stabil, wie es sollte.
Wenn dune abgestürzt ist, ist die bisherige Arbeit verloren ?
Nicht automatisch, "dune" versucht noch, das
VRML97 file kurz vor dem Absturz zu speichern. Wenn das erfolgreich ist,
wird dune unter Unix/Linux so etwas wie
Internal Crash !
Try to save Files
attempt to write file to /home/someone/.dune_crash_NUMBER_NUMBER.wrl
write successfull
in die Standartfehlerausgabe des dune starteten Fensters und auf
die Systemkonsole (z.B. das Fenster der "xconsole" Anwendung) schreiben.
Unter M$Windows erscheint eine entsprechende Messagebox

Benutzt werden hier die Systemvariablen "%HOMEDRIVE%" und "%HOMEPATH%".
Wenn sie dann dune neu starten und das file Menü öffnen,
sollten Sie den Dateinamen des .dune_crash Files sehen.

Klicken Sie darauf und speichern Sie in eine andere Datei.
-
Dune ist nicht geeignet als Modelling Tool.
Nur die einfachen Shapeknoten (Körper) Würfel, Kugel, Kegel,
Zylinder, Text (Text wird aufgrund eines Fehlers nicht korrekt angezeigt)
und ElevationGrid lassen sich effektiv eingeben.
Andere Shapeknoten, wie z.B. IndexFaceSet (aus Einzelflächen
zusammengesetzter Körper) und IndexLineSet, PointSet
würden bei der Eingabe einer grosse Zahl von Werten erfordern. Das
macht im Allgemeinen wenig Sinn.
Der verbleibende Shapeknoten "NurbsPlane" gibt es im VRML97 Standard gar
nicht, er ist für den nächsten VRML200x Standard vorgesehen.
Er wird zur Zeit von den VRML97 Browsern cc3d und contact
unterstützt.
Für den VRML97 Browser cosmoplayer 2.1 existiert eine (langsame
und nicht vollst&aum;ndige) Implementierung über ein VRML PROTO.
Weitere Informationen dazu finden Sie
hier.
Wenn Sie statt mit einfachen Shapes mit einem "IndexedFaceSet"
VRML-Modell arbeiten wollen,
bearbeiten Sie besser das Ergebnis eines Modellers (wie z.B. ac3d, Maya,
ppe, ppmodeler, aoi, moonlight3D, catia, i3d, k3d, wings3d usw. usw.)
und benutzen gegebenfalls das passende Konversionsprogramm
oder suchen sich ein freies Modell im Internet
-
Beachten Sie, dass Sie bei Interaktion, Scriptprogrammierung usw.
zum Testen "File -> Preview"
brauchen (oder das File abspeichern und dann mit einem VRML Browser ansehen
müssen), da Dune noch nicht über einen entsprechenden
Testmodus verfügt.