- ### "dune" was ist das ?

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

- ### Allgemeine Tips zu Dune

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

- ### Die 5 Fenster von "dune"

- ### Navigation

- ### Verändern des Szenengraph

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

- ### Fieldwerte verändern

  - #### Tastatureingabe

  - #### Mauseingabe

  - #### Fieldwerte verändern im 3D Preview Fenster

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

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

  - #### Linux Joystick Input (neu in Version 0.20beta)

  - #### M$Windows Joystick Input (neu in Version 0.22beta)

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

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

  - #### Script Editor (neu in Version 0.22beta)

- ### Vereinfachtes Skriptbau-Verfahren (neu in Version 0.22beta)

- ### NURBS Modellierung (zum Teil neu in Version 0.25beta)

  - #### NURBS Grundlagen

  - #### X symetrisches Modellieren (neu in Version 0.25beta)

  - #### NURBS Konversion (neu in Version 0.25beta)

  - #### IndexedFaceSet Knoten erzeugen (neu in Version 0.25beta)

## "dune" was ist das ?

Dune ist ein graphischer VRML97 Editor, ein simpler NURBS 3D Modeller 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" 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 ?
Nein, 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, Text (Text ist noch nicht besonders gut umgesetzt) und ElevationGrid lassen sich effektiv eingeben.
  Andere Shapeknoten, wie z.B. IndexFacedSet (aus Einzelflächen zusammengesetzter Körper) und IndexedLineSet, 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. wings3d, aoi moonlight3D, blender, ppmodeller, ppe, ac3d, maya, catia usw.) und benutzen gegebenfalls das passende Export/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.

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

### Navigation

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

### 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.
Die folgende Tabelle zeigt die Anforderung für die entsprechenden Knoten im VRML97 Standard:

- Appearance braucht Shape
- Material braucht Appearance
- ImageTexture braucht Appearance
- MovieTexture braucht Appearance
- PixelTexture braucht Appearance
- TextureTransform braucht Appearance
- Coordinate braucht IndexedFaceSet or IndexedLineSet or PointSet
- Color braucht IndexedFaceSet or IndexedLineSet or PointSet
- Normal braucht IndexedFaceSet
- TextureCoordinate braucht IndexedFaceSet
- FontStyle braucht Text
- 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.
Genauso wie beim lokalen kopieren/verschieben im Explorerprogramm von M$Windows2000 und ähnlichen Filemanagern kann man das Verhalten beeinflussen, wenn man die Tastatur benutzt, nachdem man angefangen hat, den VRML Knoten herumzuschieben:

- Verschieben:
  keine Taste drücken oder Shift Taste drücken (das Icon bleibt unverändert)
- Kopieren:
  Crtl Taste drücken (das Icon zeigt zusätzlich ein "+" Zeichen)
- DEF/USE:
  Crtl Taste und Shift Taste gleichzeitig drücken (das Icon zeigt zusätzlich ein "Pfeil" Zeichen)

### 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) verbunden 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 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.
- M$Windows joystick Input:
  Die Unterstützung für einen M$Windows joystick ist sehr ähnlich zum Linux joystick.
  Bei den speziellen Eigenschaften der mit M$Windows gelieferten joystick Treiber sollte man sich nicht darüber wundern, wenn z.B. der 2. Daumenstick eines Gamepads überhaupt keine Werte liefern kann, oder Joystickachsen gemeldet werden, aber nur Fehler zurückliefern.
  Ausserdem hat die Weisheit der Authoren der M$Windows joystick Programmierschnittstelle dazu geführt, dass ein Fehler als Vollausschlag interpretiert werden muss (ein ähnliches Problem führte übrigens zur Explosion der ersten Ariane 5 Rakete...).
  Deshalb sollte man unter M$Windows beim Testen mit 2 Achsen beginnen. Für den ersten M$Windows joystick (Nummer 0) kann die Kommandozeile dann zum Beispiel so lauten:

         white_dune.exe -joystick 0 -axes=2 -none=2 -allxyz=20,,,0.000001 -allrot=0.2,,,0.0000001

- 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:
  - 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.
  Die Mauseingabe bei der Aufname erfordert eine ruhige Hand. Es ist nicht ungewöhnlich, dass man nach der Aufnahme einige aufgenommene Werte loeschen will.
  Dazu kann man einen Zeitbereich im Channelview Fenster durch Klicken und gleichzeitigem Verschieben der Maus anwähen und den Menüepunkt edit -> delete bzw. das Delete Icon benutzen.
  Dadurch werden die entsprechenden Werte gelöscht.
- 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.
- Script Editor (neu in Version 0.22beta)
  Es gibt zwei Möglichkeiten, den Scripteditor zu starten:
  - Um einen neuen Scriptknoten zu erzeugen:
    Über das "Script" icon (Menüpunkt Create -> Programming -> Script),
  - Um einen selektierten Scriptknoten zu verändern:
    Über das "Object Edit" icon (Menüpunkt Action -> Object edit),
  Der geöffnete Scripteditor Dialog
  erlaubt es, neue Felder/Events zum Scriptknoten hinzuzufügen (add), sie zu verändern (change) oder zu löschen (delete).
  Drücken Sie "OK" um die Arbeit am Scriptknoten zu beenden.
- URL Editor (neu in Version 0.22beta)
  Das "url"-Feld (das den ECMAscript (javascript) Code eines Scriptknotens enthalten kann) kann in einem Texteditor verändert werden (edit). Über den Menüpunkt options -> Texteditor Settings kann der Texteditor ausgewählt werden.
  Ist das "url"-Feld leer, wird ein Schema eines ECMAscripts erzeugt.
  When the "url"-field is empty, a scheme of a ECMAscripts will be created.
  To start the textedit, select a Script Node and use the "URL Edit" icon (menupoint Action -> Url edit).

### Vereinfachtes Skriptbau-Verfahren (neu in Version 0.22beta)

Bevor man den Scripteditor Dialog benutzen kann, muss man planen, welche Datentypen und eventIn/eventOut Informationen die Knoten haben, die man anschliessen will. Dazu muss man die Knotenbeschreibung des VRML standards (zum Beispiel über den Menüpunkt Help -> Name des gerade selektierten Knoten lesen (oder ein entsprechendes Buch benutzen).
Zum schnellen Ausprobieren kann es dagegen angenehmer sein, das vereinfachte Skriptbau-Verfahren zu benutzen.
Erzeugen Sie einen "leeren" Scriptknoten mit dem "Script" icon (oder benutzen Sie den Menüpunkt Create -> Programming -> Script).
Gemäss der "Weg da!" Philosophie des ursprünglichen dune Projekts drücken Sie einfach nur "OK" im Scripteditor Dialog (siehe oben).
Jetzt wird das RouteView Fenster für die weitere Arbeit benutzt.
Scriptknoten haben ein spezielles "connect anything" ("verbinde alles") eventOut. Wenn man draufklickt, die Maustaste festhält und die Maus verschiebt ("drag") wird eine weisse Route gezeichent
Wenn man die Maustaste gedrückt hält, kann man sehen, dass man diese Route (wie beim "normalen" Routing) an eventIns anderer Knoten anschliessen kann,
dass aber (im Gegensatz zum "normal" Routing) die Farbe dieser Route (also eigentlich der Datentyp) mit dem abgefragten eventIn wechselt.
Wenn man die Maustaste loslässt, wird die Route vollendet.
Entsprechend lässt sich der spezielle "connect anything" eventIn des Scriptknotens benutzen
und mit dem eventOut eines anderen Knoten verbunden.
Jetzt müssen Sie noch das "url" Feld des Scriptknoten verändern. Neben der Benutzung von urledit können sie auch den Scriptknoten im SceneTree Fenster und das "url" Feld im FieldView Fenster selektieren und dann
das "Object Edit" Icon drücken (oder benutzen den Menüpunkt Action -> Object edit).
Nun wird "dune" versuchen einen externen Editor zu starten - eingefleischte UNIX Benutzer benutzen "xterm -e vi", das ist der Default unter Linux/UNIX ("xedit" für MacOSX, "edit" für M$Windows) wenn $WINEDITOR nicht beim ersten Programmlauf gesetzt war. Man kann die Editoreinstellung mit dem Options -> Texteditor Settings ... Menüpunkt ändern.
Im Edit Fenster sehen Sie ein Schema des benötigten javascript Codes.
Benutzen Sie Options -> ECMAscript settings um einzustellen, welche erweiterten Kommentare Sie im Schema haben wollen.
Benutzen Sie den Editor, um den Javascript code zu vervollständigen, dann speichern und verlassen Sie den Editor - im Fall des vi Editors benutzen Sie die Tastenkombination :wq

### NURBS Modellierung (zum Teil neu in Version 0.25beta)

- #### NURBS Grundlagen

  In der Computergraphik bedeuten NURBS eine komplizierte Rechenvorschrift, mit deren Hilfe sich beliebige Flächen und Linien/Kurven im Raum sehr kompakt darstellen lassen.
  Gerade für eine Netzwerkstandard wie VRML ist die Unterstützung von NURBS deshalb ein grosser Vorteil, da dabei nicht die Daten aller Eckpunkte eines Flächennetzes über ein Netzwerk übertragen werden müssen, sondern nur eine relative kleiner Anzahl von Zahlenwerten, mit denen die Eckpunkte berechnet werden können.
  Das lohnt sich, da in der Vergangenheit die Rechenleistung sehr viel stärker gestiegen ist als die Netzwerkgeschwindigkeit (zum Vergleich: der Rechner der 1969 das erste Zeichen ("L" von "LOGIN") über das Internetprotokoll übertragen hat, war ein Honeywell DDP-516 minicomputer mit 12KB Speicher, einer Taktfrequenz von 1.1 Mhz (wobei viele Takte für einen Computerbefehl benötigt wurden) und dem Gewicht einer halben Tonne. Dieser Rechner benutzte eine Netzwerkleitung mit 50000 baud. Das entspricht ungefähr der Rechenleistung eines einfachen Taschenrechners und der Netzwerkverbindung eines modernen Telefonmodems).

  Piegl und Tiller schreiben in "The NURBS book", NURBS wäre ein Akronym für "Nobody Understands nonuniform Rational B-Splines" (niemand versteht nicht-gleichartige rationale B-Splines).
  Um mit einem NURBS Modeller zu arbeiten, braucht man die entsprechende Mathematik natürlich nicht komplett zu verstehen. Allerdings kann es für die Benutzung eines Programms wie white_dune (das Zugriff auf alle Zahlenwerte der NURBS Flächen/Kurven bietet) ein Einblick in die NURBS Grundlagen sinnvoll sein.

  Erstellt man in white_dune eine NURBS-Kurve (mit Create->VRML200x->NurbsCurve /OK), verschiebt eines der weissen Kästchen und klappt alle Zahlenwerte im FieldView auf
  so erkennt man, dass eine NURBS-Kurve im wesentlichen aus 4 Datenarten besteht.

  - Kontrollpunkte (controlPoint):
    Das sind die mit weissen Kästchen markierten Punkte. Verschiebt man ein Kästchen, verschiebt sich ein Teil der Kurve entsprechend.
    Kontrollpunkte sind die wichtigsten Elemente in white_dune, um NURBS zu beeinflussen.
  - Gewichte (weight):
    Diese Werten bestimmen den Einfluss eines einzelnen Kontrollpunkts auf die Kurve. Das Wort Gewicht erinnert an die Zeit vor dem Computerzeitalter, als Graphiker Kurven mit Holzlatten (sogennanten Straklatten) und Bleigewichten gestaltet haben. Bleibt der Kontrollpunkt auf der gleichen Stelle und erhöht man das entsprechende Gewicht
    so wird die Kurve zum Kontrollpunkt hingezogen.
    Obwohl hier der Kontrollpunkt auf der gleichen Stelle liegt, hat sich sein Wert verändert. Das liegt daran, dass es zwei mathematisch gleichwertige NURBS-Formeln gibt. White_dune benutzt die bei VRML übliche Formel.
  - Knotenvektoren (knot):
    Knotenvektoren bestimmen unter anderem (***) ob ein Kontrollpunkt von der Kurve getroffen wird und ob eine Kante auftritt. Dazu müssen die Werte an der entsprechenden Stelle "Grad" "(Ordnung -1)" mal wiederholt werden.
  - Ordnung (order): (auch Grad+1 (degree+1))
    Ueber diese Zahl wird festgelegt, wie weit der Einfluss eines Kontrollpunkts reicht.
  Der verbliebene Wert "tessellation" hat keinen mathematischen, sondern einen praktischen Hintergrund. Er legt fest, mit wievielen Punkten/Ecken die Kurve dargestellt wird.
  Das Verändern dieses Werts erlaubt eine einfache Anpassung an die Graphikleistung eines Rechners.
  Per default (Wert "0") benutzt white_dune (das auch auf schwachen Rechnern laufen soll) bei Objekten mit sehr vielen Kontrollpunkten zu kleine Werte für "tessellation".
  Ein Beispiel zeigt eine Nurbsfläche, die aus einer Kugel konvertiert wurde und bei der einige Kontrollpunkte herausgezogen wurden.
  Nur mit einem hohen Wert für "tessellation" zeigt sich die "wahre" Form des Objekts.

- #### X symetrisches Modellieren (neu in Version 0.25beta)

  Mit Dune kann man NurbsSurface Knoten erstellen (z.B. mit Create -> VRML 200x -> NurbsSurface -> plain/OK). Man kann die entstandene Fläche verändern, indem man die weissen Kästchen mit der Maus verschiebt.
  Das verändert die Kontrolpunkte des NurbsSurface Knotens.
  Mit dieser Methode kann man dune am sinnvollsten bei der Herstellung von Landschaften mit Dünen
  einsetzen, die Methode ist aber nicht sehr sinnvoll für die meisten anderen Aufgaben.

  Eine Menge Objekte erfordern symetrische Modellierung, die eine Seite des Objekts soll so aussehen, wie die andere Seite. In white_dune, kann das mit dem Menüpunkt Actions -> X symetric modelling erreicht werden. Wenn dieser Menüpunkt aktiviert ist, wird jede Bewegung von den Kontrollpunkten der einen Seite
  auf die andere Seite übertragen,
  und es ist ziemlich einfach, eine ziemlich komplizierte symetrische NurbsSurface Fläche zu erzeugen.
  Die X Richtung für die symetrische Modellierung wurde wegen des Local Input Mode gewählt.
  Die Entscheidung ob der symetrische Teil eines NurbsSurface Knoten hängt ab von der Entscheidung, ob die Zahlenwerte der Kontrollpunkte/Gewichte fast gleich ist. Sie sind fast gleich, wenn der Abstand der absoluten Werte kleiner ist als der Wert "Epsilon". Die Größe von "Epsilon" kann über den Options -> Preferences Dialog eingestellt werden.
  Wenn symetrische Modellierung angewählt ist, schnappen fast gleiche Punkte zusammen und werden zusammen bewegt. Das kann benutzt werden, um offene NurbsSurface Flächen zu schliessen, aber mehrere Kontrollpunkte auf einem Platz erzeugen eine Ecke/Kante.
  Eine neu entstandene NurbsSurface Fläche existiert (in Einklang mit den VRML Standards) per default nur einseitig (was wichtig ist, wenn die Oberfläche nicht geschlossen ist): das Feld "solid" hat den Wert TRUE (wahr).
  In den meisten Fällen ist das nicht sehr sinnvoll: Um die Oberfläche doppelseitig zu machen, wird das Feld "solid" im FieldView Fenster auf FALSE (falsch) gesetzt.
  Oft ist auch eine zweiseitige Fläche nicht besonders nützlich, um einen voluminösen Körper zu bilden. In diesem Fall ist es sinnvoll, einen Group- (Gruppen-)Knoten zu erzeugen,
  den Körper mit dem NurbsSurface Knoten in den Group-Knoten zu verschieben
  und eine Kopie des Körpers mit dem NurbsSurface Knoten zusätzlich im Group-Knoten zu erzeugen. Um eine Kopie anzulegen, zieht man das Shape Icon mit der Maus ins Group icon und hält dann die Kontroltaste ("Ctrl") gedrückt, während die Maustaste noch gegedrückt ist.
  Weil in diesem Beispiel das Feld "solid" immer noch FALSE ist, kann man ein weit verbreitetes Problem des realtime 3D demonstrieren, wenn die Farbe eines Körpers verändert wird.
  Zu dünne Wände (auch "z-fighting" genannt).
  Wenn sie einen Kontrollpunkt von einem NurbsSurface Knoten etwas nach oben verschieben, um dem Körper mehr Volumen zu geben, kann die bilderzeugende Hardware und Software nicht mehr so leicht entscheiden, welche der beiden nah aneinanderliegende Flächen mit welcher Farbe näher zum Betrachter angeordnet ist.
  Der Effekt ist im allgemeinen nicht vorhersehbar, er kann sich mit dem Betrachtungswinkel, der benutzten Software (zum Beispiel VRML Browser oder Graphiktreiber) und sogar mit der benutzten Graphikkarte ändern.
  Um das Problem zu vermeiden, müssen beide "solid" Felder zu TRUE zurückgeschalten werden und das "ccw" ("Counter Clock Wise", "gegen den Uhrzeitersinn") Feld muss sich zwischen der oberen und unteren einseitigen Fläche unterscheiden.
  Jetzt können die nichtbegrenzenden Kontrollpunkte der NurbsSurface Knoten verschoben werden, um dem Körper mehr Volumen zu geben. Jetzt sollte man die Shape Knoten mit den NurbsSurface Knoten von einem Group Knoten in einen NurbsGroup Knoten.
  Der NurbsGroup Knoten ist im VRML Standard verantwortlich dafür, dass die Begrenzungen der enthaltenen NurbsSurface Knoten ohne Lücken gezeichnet werden, wenn die Kontrollpunkte der Begrenzungen der NurbsSurface Knoten identisch sind.
  In white_dune, erlaubt der NurbsGroup Knoten auch X symetrische Modellierung. Änderungen eines Kontrollpunkts werden an alle NurbsSurface Knoten weitergegeben, die direkt (oder über einem Shape Knoten) einem NurbsGroup Knoten enthalten sind.
  Das macht es möglich, die Kontrollpunkte der Begrenzungen zu verschieben und das ganze Objekt geschlossen zu halten.
  Am Ende sollte man nicht vergessen, den NurbGroup Knoten in einen Transform Knoten zu verschieben, sonst kann das Objekt nicht verschoben/rotiert/skaliert usw. werden.

- #### NURBS Konversion (neu in Version 0.25beta)

  Wenn geschlossene NurbsSurface Knoten das Ziel sind, kann es nützlich sein, schon mit einem geschlossenen Körper zu beginnen. White_dune erlaubt es (noch) nicht, einen IndexedFaceSet Knoten in einen NurbsSurface Knoten zu konvertieren, aber es erlaubt es die primitiven VRML Knoten (box, cone, cylinder und sphere) in einen NurbsSurface Knoten zu konvertieren. White_dune erlaubt auch, einen NurbsCurve Knoten in einen NurbsSurface Knoten zu konvertieren (über Drehung).

  - Box
    Um einen Box (Würfel) Knoten in einen NurbsSurface Knoten zu konvertieren, muss ein Box Knoten im Szenengraph angewählt werden
    und der Menüpunkt actions -> convert to NurbsSurface benutzt werden.
    Wenn die "6 Plains" (6 Flächen) Schaltfläche nicht gedrückt ist, wird ein einziger NurbsSurface Knoten erzeugt.
    Wenn die "6 Plains" Schaltfläche gedrückt ist, werden 6 Flächen in einem NurbsGroup Knoten erzeugt.
  - Cone, Cylinder und Sphere
    Die Konversion dieser primitiven Körper ist ähnlich zu der Konversion eines Box Knotens, aber die Objekte werden intern mit einer drehenden Linie (besser NurbsCurve) erzeugt. Convertion of this primitives is similar to Zum Beispiel beim Ergebnis einer Cylinder Konversion eines
    sieht man, dass es Kontrollpunkte gibt, die die Oberfläche berühren. Dies wird erreicht, indem Werte im Knotenvektor wiederholt werden. Als Konsequenz entsteht eine Kante, wenn der Kontrollpunkt verschoben wird.
  - NurbsSurface aus NurbsCurve (über Drehung)
    Zur Zeit bietet dieses Methode die meisten Modellierungsmöglichkeiten.
    Zuerst muss ein NurbsCurve Knoten im Scenengraph angewählt werden
    Wenn ein NurbsCurve erzeugt wird (e.g. via Create -> VRML 200x -> NurbsCurve ) muss in Betracht gezogen werden, ob X symetrische Modellierung benutzt wird.
    Der NurbsCurve Erzeugungsdialog
    bietet drei Möglichkeiten: Kurve entlang x, entlang y, entlang z Achse. Nur wenn die Kurve um die y oder z Achse gedreht wird, ist X symetrische Modellierung möglich. Deswegen ist es möglicherweise vorzuziehen, einen NurbsCurve Knoten entlang der y oder z Achse zu erzeugen.
    Die Kurvenpunkte bilden die Seitenansicht des Drehkörpers.
    Mit Actions -> Convert to NurbsSurface geht es weiter.
    Um X symetrische Modellierung möglich zu machen, sollte die Schaltfläche "Flatten Curve before rotation" ("Kurve vor der Drehung abflachen ") gedrückt bleiben. Dabei werden alle Punkte in eine Ebene verschoben, wobei der Abstand vom Nullpunkt erhalten bleibt.
    Genau wie bei konvertierten Sphere, Cylinder und Cone Knoten, kann eine Ecke entstehen, wenn die Kontrollpunkte verschoben werden.

- #### IndexedFaceSet Knoten erzeugen (new in Version 0.25beta)

  NURBS Flächen werden oft als abgerundete Flächen. Aber neben mehrfachen Kontrollpunkten und Knotvektor Werten, kann das Setzen der u/vTesselation Wert einfach dazu benutzt werden, um Objekte aus Einzelflächen (IndexedFaceSet Knoten) zu erzeugen.
  Wenn zum Beispiel ein Sphere Knoten mit Actions -> Convert to NurbsSurface konvertiert wird
  und kleine u/vTesselation Werte gesetzt werden, entstehen nur sehr wenige Flächen.
  Mit Actions -> Convert nurbs to IndexedFaceSet kann das Resultat in einem IndexedFaceSet Knoten verwandelt werden.
  Um die Normalenvektoren loszuwerden, die die Farben der Flächen verschwimmen lassen, muss der Normal Knoten vom IndexedFaceSet Knoten entfernt werden.

  Die folgende Tabelle zeigt, welche grundsätzlichen Körper mit dem Setzen von u/vTesselation in NurbsSurface Knoten aus konvertierten Primitiven erzeugt werden können.

  Köper | Konvertiert von | uTesselation | vTesselation
  Tetraeder | Cone | 3 | 4
  4-eckige Pyramide | Cone | 4 | 4
  Hexaeder | Sphere/Cylinder | 3 | 2
  Octaeder | Sphere/Cylinder | 4 | 2
  n-eckiges Prisma | Cylinder | n | >1

  Die Implementierung von IndexedFaceSet in white_dune hat (noch) keine Handles ("Anfasser", zum Beispiel weisse Kästchen, die mit der Maus verschoben werden können). Wenn eine NurbsSurface Fläche Plain (Create -> VRML 200x -> NurbsSurface -> Plain (Nurbs)) mit Grad 1 erzeugt wird
  und uTesselation auf den Wert uDimension-1 und vTesselation auf den Wert vDimension-1 gesetzt wird, sind die sichtbaren Ecken und die Position der Handles (des nurbsSurface Knotens) identisch, genauso, wie es bei einem IndexedFaceSet Knoten wäre.
  Mit dem Menüpunkt Actions -> Convert nurbs to IndexedFaceSet kann das Result in einen IndexedFaceSet Knoten verwandelt werden.
  Um die Normalenvektoren loszuwerden, die die Farben der Flächen verschwimmen lassen, muss der Normal Knoten vom IndexedFaceSet Knoten entfernt werden.
  Unglücklicherweise ist die Konversion von einem IndexedFaceSet Knoten zurück in einen NurbsSurface Knoten not nicht implementiert...

*** Der Knotenvektoren ist der Vektor, über dem die NURBS-Kurve definiert ist. Ohne darauf näher einzugehen, soll nur kurz und beispielhaft sein Einfluß gezeigt werden. Betrachtet man den im Bild gezeigten Knotenvektor, so fällt auf, dass sich die ersten sowie die letzten Werte des Knotenvektors wiederholen. Das hat zu Folge, dass die Kurve wirklich bis zum ersten (letzten) Kontrollpunkt geht, und die erste (letzte) Seite des Kontrollpolygons (Polygon, dass durch die Kontrollpunkte gebildet wird) als Tangente besitzt, wodurch man bequem und "kontrolliert" modellieren kann (Man kennt die Endpunkte des Splines!). Vervielfacht man Werte des Knotenvektors in seinem Inneren, so erzeugt man einen Stetigkeitabfall in der Kurve. Tritt ein Knoten so oft auf, wievielten Grades die Kurve ist, so kann man, wie im Bild zu sehen, eine Ecke in der Kurve erzeugen.