- ### "dune" was ist das ?

- ### Was bedeuten Szenengraph, Fieldwerte, Routes usw. ?

- ### Die 5 Fenster von "dune"

- ### Verändern des Szenengraph

- ### Eingabe/Löschen von ROUTE's

- ### Fieldwerte verändern

  - #### Tastatureingabe

  - #### Mauseingabe

  - #### Fieldwerte verändern im 3D Window

  - #### 6D Input (neu in Version 0.19beta)

  - #### 6D Local Mode Input (neu in Version 0.19beta)

  - #### Fieldwerte verändern im ChannelView Window

  - #### Farbkreis (neu in Version 0.19beta)

- ### Navigation

- ### "dune" abgestürzt, bisherige Arbeit verloren ?

- ### Allgemeine Tips zu Dune

## "dune" was ist das ?

Dune ist ein graphischer VRML97 Editor und ein Animationwerkzeug in Entwicklung.
Es kann VRML97 files lesen und stellt deren Szenengraph dar, und erlaubt es dem Benutzer, den Szenengraph, die Fieldwerte und Routes zu ä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) einzusetzen.

### Was bedeuten Szenengraph, Fieldwerte und Routes usw. ?

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.

### Die 5 Fenster von "dune"

Neben diversen Toolbars mit Icons besteht "dune" im wesentlichen aus 5 Fenstern. Ausser dem "3D Window" 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 Window
  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 Window 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.

### Verändern des Szenengraph

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.

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.

### Eingabe/Löschen von ROUTE's

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.

### Fieldwerte verändern

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 Window
  Veränderungen im 3D Window 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 Window 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.
  Zur Zeit werden im 6D Input Modus nur Transform-Knoten auf den 3 tiefsten Ebene des Szenengraphen korrekt unterstützt.
  Natürlich existiert das Problem nur für 6D Eingabegeräte (dieser Programmteil ist noch nicht vollständig), nicht für die Dateneingabe mit Maus oder Tastatur.
  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 auch 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. 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.
  Der 6D Local Mode funktioniert natürlich auf jedem Level des Szenengraph.
- 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 Window 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:
  - Es müssen ROUTEs in der Form

           ROUTE TimeSensor.fraction_changed TO ???Interpolator.set_fraction
           ROUTE ???Interpolator.value_changed TO ???.set_???

    vorhanden sein.
  - Im Timesensor-Knoten muss der Fieldwert "loop" auf "TRUE" gesetzt sein (die Animation wiederholt sich immer wieder).
  - Der Fieldwert "starttime" des Timesensor-Knoten muss grösser oder gleich dem Fieldwert "stoptime" des Timesensor-Knoten sein.
  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 etwas langsam....
  Über den "OK" Button kehrt man zum normalen FieldView Fenster zurück.

### Navigation

Um im 3D 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 <img=6d.jpg> durch das VRML File navigiert werden.

### "dune" abgestürzt, bisherige Arbeit verloren ?

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.

### Allgemeine Tips zu Dune

- Dune ist nicht geeignet als Modelling Tool.
  Nur die einfachen Shapeknoten (Körper) Würfel, Kugel, Kegel, Zylinder und Text (Text wird aufgrund eines Fehlers nicht korrekt angezeigt) lassen sich effektiv eingeben.
  Andere Shapeknoten, wie z.B. IndexFaceSet (aus Einzelflächen zusammengesetzter Körper), IndexLineSet, PointSet und ElevationGrid 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.
  Wenn Sie statt mit einfachen Shapes mit einem "IndexedFaceSet" VRML-Modell arbeiten wollen, bearbeiten Sie besser das Ergebnis eines Modellers (wie z.B. ac3d, Maja, ppe, ppmodeler, catia, i3d, k3d, wings3d usw. usw.) 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.