Sophie

Sophie

distrib > Mandriva > 10.0 > i586 > media > contrib > by-pkgid > 3d3d286587fe1782c1987bf32c6481cc > files > 125

hackwhite_dune-0.27-0.beta49.1mdk.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" 
   "http://www.w3.org/TR/REC-html40/loose.dtd"> 
<html> 
<head>
 <title>"dune" Dokumentation</title> 
</head> 
<body>
<ul>
 <li>
  <h3><a href="#dune">"dune" was ist das ?</a></h3> 
 </li>
 <li>
  <h3><a href="#crash">"dune" abgest&uuml;rzt, bisherige Arbeit verloren ?</a></h3>
 </li>
 <li>
  <h3><a href="#tips">Allgemeine Tips zu Dune</a></h3>
 </li>
 <li>
  <h3><a href="#vrml">Was bedeuten Szenengraph, Fieldwerte, Routes usw. ?</a></h3> 
 </li>
 <li>
  <h3><a href="#fenster">Die 5 Fenster von "dune"</a></h3> 
 </li>
 <li>
  <h3><a href="#navigation">Navigation</a></h3>
 </li>
 <li>
  <h3><a href="#scenegraph">Ver&auml;ndern des Szenengraph</a></h3>
 </li>
 <li>
  <h3><a href="#route">Eingabe/L&ouml;schen von ROUTE's</a></h3>
 </li>
 <li>
 <h3><a href="#fields">Fieldwerte ver&auml;ndern</a></h3>
  <ul>
   <li>
   <h4><a href="#keyboard">Tastatureingabe</a></h4>
   </li>
   <li>
   <h4><a href="#mouse">Mauseingabe</a></h4>
   </li>
   <li>
   <h4><a href="#3D Window">Fieldwerte ver&auml;ndern im 3D Preview Fenster</a></h4>
   </li>
   <li>
   <h4><a href="#6D">6D Input</a> (neu in Version 0.19beta)</h4>
   </li>
   <li>
   <h4><a href="#6Dlocal">6D Local Mode Input</a> (neu in Version 0.19beta)</h4>
   </li>
   <li>
   <h4><a href="#joystick">Linux Joystick Input</a> (neu in Version 0.20beta)</h4>
   </li>
   <li>
   <h4><a href="#joystick_windows">M$Windows Joystick Input</a> (neu in Version 0.22beta)</h4>
   </li>
   <li>
   <h4><a href="#channelview">Fieldwerte ver&auml;ndern im ChannelView Window</a></h4>
   </li>
   <li>
   <h4><a href="#colorcircle">Farbkreis</a> (neu in Version 0.19beta)</h4>
   </li>
   <li>
   <h4><a href="#scriptedit">Script Editor</a> (neu in Version 0.22beta)</h4>
   </li>
  </ul>
 </li>
 <li>
 <h3><a href="#simplescript">Vereinfachtes Skriptbau-Verfahren</a> 
                                               (neu in Version 0.22beta)</h3>
 </li>
 <li>
 <h3><a href="#nurbs">NURBS Modellierung</a> 
                                         (zum Teil neu in Version 0.25beta)</h3>
   <ul>
   <li>
   <h4><a href="#nurbsbasics">NURBS Grundlagen</a></h4>
   </li>
   <li>
   <h4><a href="#nurbssymetric">X symetrisches Modellieren</a>
                                         (neu in Version 0.25beta)</h4>
   </li>
   <li>
   <h4><a href="#nurbsconversion">NURBS Konversion</a>
                                         (neu in Version 0.25beta)</h4>
   </li>
   <li>
   <h4><a href="#nurbsindexedfaceset">IndexedFaceSet Knoten erzeugen</a>
                                         (neu in Version 0.25beta)</h4>
   </li>

  </ul>
 </li>
 </ul>

<h2><a name="dune">"dune" was ist das ?</a></h2> 
<p>
Dune ist ein graphischer VRML97 Editor, ein simpler NURBS 3D Modeller 
und ein Animationwerkzeug in Entwicklung.<br>
Es kann ein VRML97 file lesen, stellt dessen Szenengraph dar und 
erlaubt es dem Benutzer, den Szenengraph, die Fieldwerte und Routes zu 
ver&auml;ndern.<br>
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&auml;tzlich einen statischen 3D Modeller mit VRML97 Export
(wie z.B. wings3D oder Art Of Illusion) einzusetzen.<br>
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.
</p>
<h3><a name="crash">"dune" abgest&uuml;rzt, bisherige Arbeit verloren ?</a></h3>
<p>
Dune ist noch in der Entwicklungsphase und es l&auml;uft noch nicht so
stabil, wie es sollte.<br><br>
<b>Wenn dune abgest&uuml;rzt ist, ist die bisherige Arbeit verloren ?</b>
<br><br>
<font color="#FF0000"> Nein, nicht automatisch.</font>
<br><br>
"dune" versucht noch, das 
 VRML97 file kurz vor dem Absturz zu speichern. Wenn das erfolgreich ist,
 wird dune unter Unix/Linux so etwas wie 
<pre>
   Internal Crash !
   Try to save Files
  attempt to write file to /home/someone/.dune_crash_NUMBER_NUMBER.wrl
  write successfull
</pre>
in die Standartfehlerausgabe des dune starteten Fensters und auf
die Systemkonsole (z.B. das Fenster der "xconsole" Anwendung) schreiben.<br> 
Unter M$Windows erscheint eine entsprechende Messagebox<br>
<img src=crash.jpg><br>
Benutzt werden hier die Systemvariablen "%HOMEDRIVE%" und "%HOMEPATH%".<br>
Wenn sie dann dune neu starten und das file Men&uuml; &ouml;ffnen, 
sollten Sie den Dateinamen des .dune_crash Files sehen.<br>
<img src=crashrestore.jpg><br>
Klicken Sie darauf und speichern Sie in eine andere Datei.

</p>
<h3><a name="tips">Allgemeine Tips zu Dune</a></h3>
<p>
<ul>
  <li>
  <strong>Dune ist nicht geeignet als Modelling Tool.</strong><br>
  Nur die einfachen Shapeknoten (K&ouml;rper) W&uuml;rfel, Kugel, Kegel,
  Zylinder, Text (Text ist noch nicht besonders gut umgesetzt)
  und ElevationGrid lassen sich effektiv eingeben. <br>
  Andere Shapeknoten, wie z.B. IndexFacedSet (aus Einzelfl&auml;chen 
  zusammengesetzter K&ouml;rper) und IndexedLineSet, PointSet
  w&uuml;rden bei der Eingabe einer grosse Zahl von Werten erfordern. Das
  macht im Allgemeinen wenig Sinn.<br> 
  Der verbleibende Shapeknoten "NurbsPlane" gibt es im VRML97 Standard gar 
  nicht, er ist f&uuml;r den n&auml;chsten VRML200x Standard vorgesehen.<br>
  Er wird zur Zeit von den VRML97 Browsern cc3d und contact 
  unterst&uuml;tzt.<br>
  F&uuml;r den VRML97 Browser cosmoplayer 2.1 existiert eine (langsame
  und nicht vollst&aum;ndige) Implementierung &uuml;ber ein VRML PROTO.
  Weitere Informationen dazu finden Sie 
  <a href=../vrml200x_nurbssurface/index.html>hier</a>.
  <br>
  <strong>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</strong> 
  </li>
  <li>
  Beachten Sie, dass Sie bei Interaktion, Scriptprogrammierung usw.
  zum Testen <em>File -> Preview</em>
  brauchen (oder das File abspeichern und dann mit einem VRML Browser ansehen
  m&uuml;ssen), da Dune noch nicht &uuml;ber einen entsprechenden 
  Testmodus verf&uuml;gt.
  </li>
</ul>
</p>
<h3><a name="vrml">Was bedeuten Szenengraph, Fieldwerte und Routes usw. ?</a></h3> 
<p>
Dune ist ein Lowlevel Werkzeug zum Bearbeiten von VRML97 Files.
Dabei wird angenommen, dass dem Benutzer die grundlegende
Struktur von VRML97 bekannt ist. <br> 
N&auml;hrere Informationen findet
man dazu (ausser in einer Anzahl entsprechender B&uuml;cher) in der
offiziellen ISO Spezifikation unter
<a href=http://www.web3d.org/technicalinfo/specifications/vrml97/index.htm>
http://www.web3d.org/technicalinfo/specifications/vrml97/index.htm</a>
F&uuml;r die Benutzung von Dune ist vor allem die Node Referenz
<a href=http://www.web3d.org/technicalinfo/specifications/vrml97/part1/nodesRef.html>
http://www.web3d.org/technicalinfo/specifications/vrml97/part1/nodesRef.html</a>
wichtig.
</a>
</p>
<h3><a name="fenster">Die 5 Fenster von "dune"</a></h3> 
<p>
<img src=windows.png><br>
Neben diversen Toolbars f&uuml;r Icons und Nachrichten besteht "dune" im 
wesentlichen aus 5 Fenstern. Ausser dem "3D Preview" Fenster lassen
sich die Fenster &uuml;ber den Men&uuml;punkt
"View" angepasst an den jeweiligen Arbeitsschritt
ein- und ausschalten. 
<ul>
 <li>
  <b>Scene Tree</b><br>
  Dieses Fenster enth&auml;lt den Szenengraphen, und zeigt damit
  die Struktur einer VRML Datei, die Information, wie 
  einzelne VRML Nodes (Knoten) angeordnet sind. <br>
  Weitere Informationen
  &uuml;ber den Szenengraph finden Sie im Internet unter
  <a href=http://www.csv.ica.uni-stuttgart.de/vrml/linuxtag/#scenengraph>
  http://www.csv.ica.uni-stuttgart.de/vrml/linuxtag/#scenengraph</a>
 </li>
 <li>
  <b>Field View</b><br>
  Dieses Fenster enth&auml;lt die Fieldwerte, die Zahlen
  (bzw. Zeichenketten usw.) in einer VRML Datei. Angezeigt
  werden jeweils die Fields des zuletzt ausgew&auml;hlten
  Knoten. 
 </li>
 <li>
  <b>Route View</b><br>
  Dieses Fenster enth&auml;lt die ROUTE's, die 
  Informationswege mit denen sich verschiedene 
  VRML Knoten beim Programmlauf verschiedene Nachrichten
  schicken k&ouml;nnen.
 </li>
 <li>
  <b>Channel View</b><br>
  Dieses Fenster besch&auml;ftigt sich ausschliesslich
  mit Interpolatorknoten. Interpolatorknoten sind in VRML97
  vor allem wichtig f&uuml;r Animationen.
 <li>
  <b>3D Preview</b><br>
  Dieses Fenster l&auml;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&uuml;ckenhaft.<br>
  Einige Knotentypen wie "Extrusion", "PointSet", "Inline",
  "Background", selbst definierte "PROTO", "EXTERNPROTO"
  werden &uuml;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.<br>
  Es sind auch nicht alle Fieldwerte richtig dargestellt.
  Am auff&auml;lligsten ist der Fehler bei "ColorPerVertex"
  und "NormalPerVertex" Fieldwerten beim h&auml;ufig 
  auftretenden "IndexedFaceSet" (aus Einzelfl&auml;chen
  zusammengesetzter K&ouml;rper):<br>
  <img src=cosmo_no_colorpervertex.jpg>
  <img src=dune_no_colorpervertex.jpg><br>
  Korrekte und fehlerhafte Darstellung eines IndexedFaceSet
  bei "ColorPerVertex false" in Cosmoworlds/Cosmoplayer (links)
  und Dune (rechts)<br>
  <img src=cosmo_colorpervertex.jpg>
  <img src=dune_colorpervertex.jpg><br>
  Korrektere Darstellung eines IndexedFaceSet
  bei "ColorPerVertexflag true" in Cosmoworlds/Cosmoplayer (links)
  und Dune (rechts)<br>
  Ein vergleichbares Problem tritt bei "NormalPerVertex" auf.
  "NormalPerVertex" beeinflusst die Beleuchtungsberechnung 
  (Schattierung) von Objekten.<br>
  <b>Nat&uuml;rlich bedeutet eine solche falsche Darstellung im 3D Preview
  eines 
  eingelesenen VRML Objekts nicht, dass sich ein Fehler in der eingelesenen 
  VRML Datei befindet</b>. <br>
  Mit <em>File->Preview</em> kann man im Zweifelsfall zum Vergleich 
  einen VRML Browser starten.
 </li>
</ul>
</p>
<h3><a name="navigation">Navigation</a></h3>
<p>
  Um im 3D Preview Fenster navigieren zu k&ouml;nnen steht zur Verf&uuml;gung:
  <ul>
   <li>
   Shift-Mouse 1: Zoom View
   </li>
   <li>
   ctrl-Mouse 1: Rotate View
   </li>
  </ul>
  zus&auml;tzlich steht ab der Version 0.16 eine SGI artige Navigation
  zur Verf&uuml;gung. Bitte beachten Sie, dass ein fehlkonfigurierter
  Windowmanager diese Eingaben f&uuml;r seine eigenen Zwecke interpretieren
  k&ouml;nnte...
  <ul>
   <li>
   Alt-Mouse1: Rotate View
   </li>
   <li>
   Alt-Mouse2: Move View
   </li>
   <li>
   Alt-Mouse1-Mouse2: Zoom View
   </li>
  </ul>
  Statt dem Gedr&uuml;ckthalten der Alt-Taste steht ab version 0.19beta
  auch das Icon <img src=navigation.jpg> zur Verf&uuml;gung.<br>
  Ist ein 6D Eingabeger&auml;t aktiv, kann bei angew&auml;hltem 
  Scene-Icon <img src=sceneicon.jpg> im Scene Tree Fenster
  je nach der Auswahl der Transformicons <img src=schieb.jpg> <img src=rot.jpg>
  <img=6d.jpg>
  durch das VRML File navigiert werden. 
</p>
<h3><a name="scenegraph">Ver&auml;ndern des Szenengraph</a></h3>
<p>
Einen neuen
VRML node mit eine Mausklick auf das entsprechenden Icon 
hinzuf&uuml;gen ist der einfachste Weg, den Szenengraph zu &auml;ndern.<br>
Um ein VRML node zu identifizieren, bewegen Sie den Mousezeiger &uuml;ber 
das Icon und warten Sie kurz. Ein beschreibender Text wird auf der
status bar am unteren Ende des Fensters erscheinen.<br> 
Dune versucht, entweder den neuen node am blau untermalten Selektionspunkt des 
Szenengraph<br> 
<img src=node_add_valid.jpg><br>
oder am root node des Scenengraph ("Scene" Icon) einzuf&uuml;gen.<br>
Dune graut alle node Icons aus, die nicht eingef&uuml;gt werden k&ouml;nnen.<br>
<img src=node_add_invalid.jpg><br>
Die folgende Tabelle zeigt die Anforderung f&uuml;r die entsprechenden 
Knoten im VRML97 Standard:<br>
<br>
<ul>
<li>Appearance braucht Shape
<li>Material braucht Appearance
<li>ImageTexture braucht Appearance
<li>MovieTexture braucht Appearance
<li>PixelTexture braucht Appearance
<li>TextureTransform braucht Appearance
<li>Coordinate braucht IndexedFaceSet or IndexedLineSet or PointSet
<li>Color braucht IndexedFaceSet or IndexedLineSet or PointSet
<li>Normal braucht IndexedFaceSet
<li>TextureCoordinate braucht IndexedFaceSet
<li>FontStyle braucht Text
<li>AudioClip braucht Sound
</ul>
<br>
So muss zum Beispiel ein Appearence Knoten selektiert sein, damit ein 
ImageTexture Knoten eingef&uuml;gt werden kann, oder ein Shape Knoten
selektiert sein, damit ein Appearence Knoten eingef&uuml;gt werden kann.<br>
Alle die entsprechenden Felder im VRML97 Standard sind vom Datentyp
SFNode, deshalb kann nur ein Knoten eingef&uuml;gt werden.
Deshalb wird ein Icon auch dann ausgegr&auml;ut, wenn schon ein 
entsprechender Knoten vorhanden ist.
Zum Beispiel k&ouml;nnen keine zwei ImageTexture Knoten zu einem
Appearence Knoten hinzugef&uumlt werden. 
Deswegen ist das ImageTexture Icon ebenfalls ausgegraut, 
wenn ein Appearence Knote selektiert wird, aber ein ImageTexture Knoten
schon vorhanden ist.
</p>
<p>
Ein anderer Weg, den Szenengraph zu ver&auml;ndern, ist Teile davon mit
der Maus herumzuschieben.<br>
Dune zeigt das Icon eines Stopschildes,
wenn der Ziel node dies nicht erlaubt.<br>
<img src=scenegraphchange_invalid.jpg><br>    
Wenn der Ziel node es erlaubt, benutzt dune den normalen Mauszeiger.<br>
<img src=scenegraphchange_valid.jpg><br>
Genauso wie beim lokalen kopieren/verschieben im Explorerprogramm von 
M$Windows2000 und &auml;hnlichen Filemanagern kann man das Verhalten
beeinflussen, wenn man die Tastatur benutzt, nachdem man angefangen hat,
den VRML Knoten herumzuschieben:<br>
<ul>
 <li>
  Verschieben: <br>
  keine Taste dr&uuml;cken oder Shift Taste dr&uuml;cken
  (das Icon bleibt unver&auml;ndert)
  <br><img src=scenegraphchange_move.jpg><br>  
 </li>
 <li>
  Kopieren: 
  <br><img src=scenegraphchange_copy_ptr.jpg><br>  
  Crtl Taste dr&uuml;cken
  (das Icon zeigt zus&auml;tzlich ein "+" Zeichen)
  <br><img src=scenegraphchange_copy.jpg><br>  
 </li>
 <li>
  DEF/USE: 
  <br><img src=scenegraphchange_link_ptr.jpg><br>  
  Crtl Taste und Shift Taste gleichzeitig dr&uuml;cken
  (das Icon zeigt zus&auml;tzlich ein "Pfeil" Zeichen)
  <br><img src=scenegraphchange_link.jpg><br>  
 </li>
</ul>
</p>
<h3><a name="route">Eingabe/L&ouml;schen von ROUTE's</a></h3>
<p>
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&aumlstchen
f&uuml;r die Events klickt. Dabei wird der Name des Events angezeigt
und es l&auml;sst sich eine Linie zum n&auml;chsten Icon/Event ziehen.
<br>
<img src=routemake1.jpg><img src=routemake2.jpg> <br>
Es k&ouml;nnen (wie im VRML Standard verlangt) nur Events mit gleichen
Datentypen (gleiche Farbe der K&auml;stchen) verbunden werden.<br>
Zum L&ouml;schen der ROUTEs kann die Linie einfach durchgestrichen 
werden.<br>
<img src=routecut1.jpg><img src=routecut2.jpg><br>
</p> 
<h3><a name="fields">Fieldwerte ver&auml;ndern</a></h3>
<p>
Es gibt mehrere M&ouml;glichkeiten, Fieldwerte zu ver&auml;ndern:<br>
<ul>
 <li>
  <b><a name="keyboard">Tastatureingabe</a></b><br>
  &Uuml;ber das klicken mit der Maus auf den entsprechenden Wert
  und dem Loslassen der Maustaste. Dann &ouml;ffnet sich ein 
  Texteingabefenster und man kann Werte &uuml;ber die Tastatur eingeben.
 </li>
 <li>
   <b><a name="mouse">Mauseingabe</a></b><br>
  &Uuml;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&ouml;ht oder erniedrigt den Wert.<br>
   <img src=fieldchange.jpg><br>
  Die Ver&auml;nderung von Fieldwerten ist noch nicht komplett implementiert
  f&uuml;r "MF Fields" (mehrfache Fields). "MF Fields" sind die Fields, die
  &uuml;ber das "+" Zeichen ge&ouml;ffnet werden.
 </li>
 <li>
  <b><a name="3D Window">Fieldwerte ver&auml;ndern im 3D Preview Fenster</a></b><br>
   Ver&auml;nderungen im 3D Preview Fenster bedeuten auch eine 
   Ver&auml;nderung der
   Fieldwerte. Haupts&auml;chlich wird dabei ein Transformknoten 
   ver&auml;ndert.<br>
   Mit den Werkzeugen <img src=transform.jpg> legen Sie beim interaktiven
   Arbeiten fest, ob das Arbeit mit der Maus auf einem Transformknoten
   eine 
   <ul>
   <li> Verschiebung <img src=schieb.jpg> </li>
   <li> Drehung <img src=rot.jpg> </li>
   <li> Skalierung <img src=scale.jpg> </li>
   <li> Mittelpunktsverschiebung <img src=center.jpg>
        <small>(neu in Version 0.19beta)</small> </li>
   </ul>
   aktiviert wird. <br>
   <strong>Beachten Sie, dass Sie diese Werkzeuge nicht benutzen
   k&ouml;nnen, wenn kein Transformknoten <img src=transform2.jpg> 
   im entsprechenden Zweig 
   des Szenengraphs vorhanden ist</strong>.<br>
   Ausser dem Transformknoten k&ouml;nnen auch andere Fieldwerte im 3D 
   Preview Fenster
   ver&auml;ndert werden. Dabei lassen sich kleine weisse K&auml;stchen 
   verschieben, wie z.B. bei ElevationGrid, PointLight, Box oder beim 
   VRML200x NurbSurface Node.
 </li>
 <li>
  <b><a name="6D">6D Input</a></b> <small>(neu in Version 0.19beta)</small><br>
  Seit Version 0.19beta unterst&uuml;tzt Dune 6D Eingabeger&auml;te
  (6D bezieht sich auf die 6 Freiheitsgrade) unter Unix/Linux.<br> 
  Ist ein 6D Eingabeger&auml;t konfiguriert und das Icon <img src=6d.jpg> 
  gedr&uuml;ckt, kann ein Transform-Knoten
  (und die darin enthaltenen Objekte) in allen 6 Freiheitsgraden bewegt 
  werden. Das Icon <img src=schieb.jpg> beschr&auml;nkt sich auf
  Verschiebung, das Icon <img src=rot.jpg> auf Drehung.
  <br>
  Das klassische 
  6D Eingabeger&auml;t
  ist der Spaceball, eine Art Joystick, der nur kleine Auslenkungen erlaubt,
  diese aber in alle Raumrichtungen, einschliesslich Drehungen.<br>
  <img src=spaceball.jpg><br>
  Dr&uuml;ckt man zum Beispiel auf den Spaceball, bewegt sich das Objekt
  nach unten. Verdreht man den Spaceball, folgt das Objekt dieser
  Bewegung.<br>
  Die Konfiguration der 6D Eingabeger&auml;te funktioniert (noch) 
  ausschliesslich &uuml;ber Kommandozeilenparameter. Dabei
  muss neben der Art des Eingabeger&auml;ts auch die Skalierung
  (Multiplikation) der Eingabewerte angegeben werden, zum Beispiel:
<br>
<pre>
   dune -xinput spaceball -allxyz=20,200 -allrot=40,400
</pre>
<br>
  Ausser der Unterst&uuml;tzung &uuml;ber das Xinput Protokoll werden
  Spaceballger&auml;te
  auch &uuml;ber Linux Joystick und libsball unterst&uuml;tzt. Details zu
  den Kommandozeilenparametern sind in der 
  <a href=dune.1.html#lbAF>man page</a> zu finden. <br>
  Ein anderes 6D Eingabeger&auml;t sind sogenannte Dials (verf&uuml;gbar
  z.B. unter SGI IRIX).
  In der Defaulteinstellung sind die Eingabeachsen etwas ung&uuml;nstig
  angeordnet<br>
  <img src=dials_default.jpg><br>
  &Uuml;ber Kommandozeilenparameter 
<br>
<pre>
   dune -xinput dialbox-1 -x=0 -y=2 -z=4 -xrot=1 -yrot=3 -zrot=5 -all=100,100,wheel
</pre>
<br>
  lassen sich die Achsen vertauschen.<br>
  <img src=dials_normal.jpg><br>
 </li>
 <li>
  <b><a name="6Dlocal">6D Local Mode Input:</a></b><small> Kennen Sie Funkfernsteuerungen? (neu in Version 0.19beta)</small><br>
  Ist das 6D Local Icon <img src=6dloc.jpg> gedr&uuml;ckt, so kann man damit
  die lokalen Achsen eines Transformknoten steuern. <br>
  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.<br>
  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&uuml;nen Y-Pfeils.<br>
  <img src=6dlocal_right3.jpg><br>
  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,<br>
  <img src=6dlocal_wrong.jpg><br>
  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.<br>
  <img src=6dlocal_right1.jpg><br>
  <img src=6dlocal_right2.jpg><br>
  Bei der Benutzung zeigt sich ein Effekt, der f&uuml;r Benutzer von
  funkgesteuerten Modellflugzeugen keine &Uuml;berraschung darstellt:
  kommt das Objekt "auf einen zu", f&uuml;hrt eine Rollbewegung des
  Spaceballs nach links zu einer Rollbewegung des Objekts nach rechts.
  <br>
  Ein &auml;hnlicher Bewegungsmodus ist der rocket <img src=rocket.jpg> 
  (Racketen) Modus. Im rocket modus, sind Verschiebungen nur in der
  lokalen Z-Richtung erlaubt.
  Das is n&uuml;tzlich, um ein Object entlang eines Pfades zu steuern
  und dabei alle Drehungen zu erlauben.<br>
  Ein anderer &auml;hnlicher Bewegungsmodus ist der hover <img src=hover.jpg> 
  (schwebe) Modus. Im hover modus, sind Drehungen nur um die lokale 
  y-Achse erlaubt.
  Das is n&uuml;tzlich, um ein Object auf einer Ebene zu steuern.<br>
  Andere Bewegungsmodi, die im lokalen Modus arbeiten (&Auml;nderungen nur 
  in Richtung der lokalen Achsen), sind der scale <img src=scale.jpg> 
  (Skalierung) und changing center <img src=center.jpg> (Zentrum 
  ver&auml;ndern) Modus.
 </li>
 <li>
  <b><a name="joystick">Linux joystick Input:</a></b><br>
  Leider sind 6D Eingabeger&auml;te nicht besonders verbreitet. 
  Deshalb bietet white_dune unter Linux Support f&uuml;r joysticks an.
  Eine ganze Anzahl unterschiedlicher Ger&auml;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.
  <ul>
  <li>
  6D Joysticks (z.B. Labtec Spaceball) sind wie alle anderen 6D 
  Eingabeger&auml;te zu behandeln.<br>
  </li>
  <li>
  4D Joysticks (z.B. Gamepads mit 2 Daumensticks) erlauben keinen 6D und 
  6D Local Modus. Ausser Verschiebung <img src=schieb.jpg>, 
  Drehung <img src=rot.jpg>, Skalierung <img src=scale.jpg> und
  Mittelpunktsverschiebung <img src=center.jpg> unterst&uuml;tzen sie noch
  hover <img src=hover.jpg>
  (schwebe) Modus und rocket <img src=rocket.jpg> (Racketen) Modus.<br>
  Dabei werden je nach Modus Rotation und Verschiebung auf die 
  entsprechenden Achsen gelegt.
  </li>
  <li>
  Bei 3D Joysticks (z.B. Joystick mit Drehgriff)
  ist die Lage etwas komplizierter. In der default Einstellung erzeugt
  eine Eingabe &uuml;ber die dritte Achse (also eine Drehung am Griff) 
  eine Bewegung in Richtung der z-Achse.<br>
  <img src=joystick_3D_move.jpg> <img src=joystick_3D_rot.jpg>
  </li>
  <li>
  Beim 2D Joystick stehen nicht gen&uuml;gend Achsen f&uuml;r 
  eine 3D Eingabe zur Verf&uuml;gung. Deshalb muss zwischen 
  einer Interpretation der 2. Achse als z-Richtung (near/far 
  <img src=near_far.jpg> (nah-fern) Modus) und als y-Richtung 
  (up/down <img src=up_down.jpg> (oben-unten) Modus) &uuml;ber die 
  Icons umgeschaltet werden. <br>
  Bei Drehungen bedeutet der near/far <img src=near_far.jpg> (nah-fern) 
  Modus eine Drehung um die y-Achse, der up/down <img src=up_down.jpg> 
  (oben-unten) Modus eine Drehung um die z-Achse.<br>
  </li>
  <li>
  Der rocket <img src=rocket.jpg> (Racketen) Modus ben&ouml;tigt eigentlich
  4 Achsen. Damit er mit einem 3D joystick benutzt werden kann, wird
  hier ebenfalls die Drehungsinformation des near/far  
  <img src=near_far.jpg> (nah-fern) Modus und up/down <img src=up_down.jpg>
  (oben-unten) Modus benutzt.<br>
  Beim 2D Joystick steht der rocket <img src=rocket.jpg> (Racketen) Modus 
  nicht zur Verf&uuml;gung.
  </li>
  </ul><br>
  Es kommt vor, dass bei eine Joystick-Achse wenig brauchbar erscheint 
  (wie z.B. beim Micro$oft Sidewinder Pro der Schubregler). <br>
  <img src=joystick_sidewinder.jpg><br>
  Deshalb kann die Anzahl der Achsen beschr&auml;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.
<br>
<pre>
   dune -joystick /dev/input/js0 -axes=3
</pre>
<br>
  Gamepads sind h&auml;ufig mit wenig sinnvollen Achsen &uuml;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&auml;ndert werden.
<br>
<pre>
   dune -joystick /dev/input/js0 -y=4 -z=-1 -xrot=6 -yrot=3 -zrot=5
</pre>
<br>
  Dabei bedeutet die Angabe "-z=-1" dass die z-Achse auf die Achse Nummer
  1 (also die 2. Achse, da die Z&auml;hlung bei 0 beginnt) gelegt wird,
  die Eingaberichtung aber umgedreht wird. 
 </li>
 <li>
  <b><a name="joystick_windows">M$Windows joystick Input:</a></b><br>
  Die Unterst&uuml;tzung f&uuml;r einen M$Windows joystick ist sehr
  &auml;hnlich zum Linux joystick.<br>
  Bei den speziellen Eigenschaften der
  mit M$Windows gelieferten joystick Treiber sollte man sich nicht
  dar&uuml;ber wundern, wenn z.B. der 2. Daumenstick eines Gamepads
  &uuml;berhaupt keine Werte liefern kann, oder Joystickachsen gemeldet 
  werden, aber nur Fehler zur&uuml;ckliefern.<br> 
  Ausserdem hat die Weisheit der Authoren der M$Windows joystick 
  Programmierschnittstelle dazu gef&uuml;hrt, dass ein Fehler 
  als Vollausschlag interpretiert werden muss (ein &auml;hnliches Problem
  f&uuml;hrte &uuml;brigens zur Explosion der ersten Ariane 5 Rakete...).<br>
  Deshalb sollte man unter M$Windows beim Testen mit 2 Achsen beginnen.
  F&uuml;r den ersten M$Windows joystick (Nummer 0) kann die Kommandozeile
  dann zum Beispiel so lauten:
<br>
<pre>
   white_dune.exe -joystick 0 -axes=2 -none=2 -allxyz=20,,,0.000001 -allrot=0.2,,,0.0000001
</pre>
 </li>
 <li>
   <b><a name="channelview">Fieldwerte ver&auml;ndern im ChannelView Window</a></b><br>
   Das ChannelView Window wird zur Anzeige oder Ver&auml;nderung von 
   Interpolator-Knoten
   benutzt. Bei einem Interpolator-Knoten sind Eingabewerten zwischen 0 und 1
   eine Reihe von Ausgabewerten zugeordnet.<br>
   Interpolatoren werden in VRML bei einfachen Animationen in der Form
<br>
<pre>
   ROUTE TimeSensorDEFNAME.fraction_changed TO ???InterpolatorDEFNAME.set_fraction
   ROUTE ???InterpolatorDEFNAME.value_changed TO ???DEFNAME.set_???
</pre>
<br>
   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&auml;hlt einen passenden Zwischenwert der Ausgabewerten, der
   in andere VRML-Knoten geleitet werden kann, so dass
   eine Animation ruckfrei abl&auml;ft. 
  <br>
   Im folgenden Beispiel:<br>
   <img src=interpolator.jpg><br>
   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&ouml;rper) bei Zeitzykluswerten zwischen 
   0 und 0.3 von y=0 nach y=2 (also nach oben) bewegt.<br>
  Einige der in dune benutzbaren Interpolatoren werden (noch) nicht 
  unterst&uuml;tzt, sie sind wegen der Masse der Daten in der Regel nur 
  schwer einzugeben. <br>
  <ul>
   <li>
   Einfach benutzbar:
   <ul>
    <li>
     ColorInterpolator:<br>
     Interpoliert zwischen Farben.<br>
     Farben finden sich z.B. bei Shape->Appearance->Material    
    </li>
    <li>
     PositionInterpolator:<br>
     Interpoliert zwischen Positionen.<br>
     Ziel kann z.B. Transform.set_translation sein.
    </li>
    <li>
     OrientationInterpolator:<br>
     Interpoliert zwischen Drehungen.<br>
     Ziel kann z.B. Transform.set_rotation sein.
    </li>
    <li>
     ScalarInterpolator:<br>
     Interpoliert zwischen einzelnen Zahlen.<br> 
     Einzelne Zahlen kommen oft in Knoten als EventIn vor.<br>
     Daher gibt es viele Verwendungsm&ouml;glichkeiten.
    </li>
   </ul>
   <li>
   Zur Zeit noch nicht unterst&uuml;tzt, weil sie einen Hang zum Datenwald 
   haben:
   <ul>
     <li>
      CoordinateInterpolator:<br>
      Interpoliert zwischen den Positionen von Punkten eines IndexFaceSet.<br>
      Das heisst das pro Punkt eines zusammengesetzten 
      K&ouml;rpers und Zeitschritt ein 3D Vektor Wert eingetragen werden muss.
      Animationen mit der Hilfe des CoordinateInterpolator nennt man
      "Morphing".
     </li>
     <li>
     NormalInterpolator:<br>
     Interpoliert zwischen den Oberfl&auml;chennormalen eines
     aus Einzelflaechen zusammengesetzten K&ouml;rpers. <br>
     Das heisst das pro Punkt (oder Polygon) eines zusammengesetzten 
     K&ouml;rpers und Zeitschritt ein 3D Vektor Wert eingetragen werden muss.
     </li>
   </ul>
   </li>
  </ul> 
  Bestimmte einfache Interpolator-Animationen k&ouml;nnnen in 
  Dune auch &uuml;ber Ver&auml;nderungen im 3D Preview Fenster erstellt werden.
  PositionInterpolator/Transform.set_translation
  und OrientationInterpolator/Transform.set_rotation basierte 
  Animationen k&ouml;nnen auch &uuml;ber die Aufnahme von 6D 
  Eingabeger&auml;ten eingegeben werden.<br><br>
  Damit mit den Werkzeugen <img src=cassettenrecorder.jpg>
  wie mit einem Kassettenrecorder Animationen aufgenommen und abgespielt
  werden k&ouml;nnen sind folgende Vorraussetzungen n&ouml;tig:
  <ul>
  <li>
  Es m&uuml;ssen ROUTEs in der Form
  <br>
<pre>
   ROUTE TimeSensor.fraction_changed TO ???Interpolator.set_fraction
   ROUTE ???Interpolator.value_changed TO ???.set_???
</pre>
  <br>
  vorhanden sein.
  </li>
  <li>
  Im Timesensor-Knoten muss der Fieldwert "loop" auf "TRUE" gesetzt sein
  (die Animation wiederholt sich immer wieder). 
  </li>
  <br><img src=timesensor.jpg><br>
  <li>
  Der Fieldwert "starttime" des Timesensor-Knoten muss gr&ouml;sser oder 
  gleich dem Fieldwert "stoptime" des Timesensor-Knoten sein.
  </li>
  </ul>  
  Wird nur das Aufnahmeicon gedr&uuml;ckt <img src="recording_one.jpg">, 
  muss der Zeitcursor jeweils ver&auml;ndert
  werden und danach der entsprechende Wert (&uuml;ber Tastatur, Maus oder
  6D Eingabeger&auml;t) ver&auml;ndert werden.<br>
  <img src="animation_onetime.jpg">
  <br><br>
  <img src="animation_onetime2.jpg">
  <br><br>
  Wird das Aufnahmeicon zusammen mit dem Abspielicon gedr&uuml;ckt 
  <img src="recording.jpg">, wird dauernd die Ver&auml;nderung der Werte
  (durch <a href="#mouse">Mauseingabe</a> oder 6D Eingabeger&auml;t) 
   aufgenommen. 
  <br>
  <img src="animation_recording.jpg">
  <br>
  Die Mauseingabe bei der Aufname erfordert eine ruhige Hand. 
  Es ist nicht ungew&ouml;hnlich, dass man nach der Aufnahme einige 
  aufgenommene Werte loeschen will.
  <br>
  <img src="delete_keys1.jpg">
  <br>
  Dazu kann man einen Zeitbereich im Channelview Fenster durch Klicken und 
  gleichzeitigem Verschieben der Maus anw&auml;hen und den Men&uuml;epunkt
  <em> edit -> delete </em> bzw. das Delete Icon benutzen.
  <br>
  <img src="delete_keys2.jpg">
  <br>
  Dadurch werden die entsprechenden Werte gel&ouml;scht.
  <br>
  <img src="delete_keys3.jpg">
  <br>
 </li>
 <li>
  <b><a name="colorcircle">Farbkreis</a></b> <small>(neu in Version 0.19beta)</small><br>
  F&uuml;r Farbwerte gibt es einen spezielles Eingabefenster, das an die
  Stelle des FieldView Fensters tritt, wenn darin ein Farbwert 
  ausgew&auml;hlt ist und das Colorcircle Icon gedr&uuml;ckt ist.<br>
  <img src=colorcircle1.png><br>
  Im Farbkreis kann man dann mit einem Mausklick eine bestimmte Farbe 
  und im Farbbalken daneben anschliessend eine dunklere Variante 
  ausw&auml;hlen.<br> 
  <img src=colorcircle2.png><br>
  Der Aufbau des Farbkreises ist zur Zeit noch ziemlich langsam, wenn unter
  Unix/Linux kein True/Directcolor Display zur Verf&uuml;gung steht...<br>
  &Uuml;ber den "OK" Button kehrt man zum normalen FieldView Fenster
  zur&uuml;ck.
 </li>
 <li>
  <b><a name="scriptedit">Script Editor</a></b> <small>(neu in Version 0.22beta)</small><br>
  Es gibt zwei M&ouml;glichkeiten, den Scripteditor zu starten:<br>
  <img src=scriptedit_icon1.jpg><br>
  <ul>
    <li>
      Um einen neuen Scriptknoten zu erzeugen:<br>
      &Uuml;ber das "Script" icon (Men&uuml;punkt <em>Create -> Programming -> Script</em>), 
    </li>
    <li>
      Um einen selektierten Scriptknoten zu ver&auml;ndern:<br>
      &Uuml;ber das "Object Edit" icon 
      (Men&uuml;punkt <em>Action -> Object edit</em>), 
    </li>
  </ul>
  Der ge&ouml;ffnete Scripteditor Dialog<br>
  <img src=scripteditor.jpg><br>
  erlaubt es, neue Felder/Events zum Scriptknoten hinzuzuf&uuml;gen (add),
  sie zu ver&auml;ndern (change) oder zu l&ouml;schen (delete).<br>
  Dr&uuml;cken Sie "OK" um die Arbeit am Scriptknoten zu beenden.
 </li>
 <li>
   <b><a name="urledit">URL Editor</a></b> <small>(neu in Version 0.22beta)</small><br>
  Das "url"-Feld (das den ECMAscript (javascript) Code eines Scriptknotens
  enthalten kann) kann in einem Texteditor ver&auml;ndert werden (edit).
  &Uuml;ber den Men&uuml;punkt <em>options -> Texteditor Settings</em>
  kann der Texteditor ausgew&auml;hlt werden.<br>
  Ist das "url"-Feld leer, wird ein Schema eines ECMAscripts erzeugt.<br>
  When the "url"-field is empty, a scheme of a ECMAscripts will be created.<br>
  To start the textedit, select a Script Node and use the "URL Edit" icon
  (menupoint <em>Action -> Url edit</em>).<br>
  <img src=urledit.jpg><br>  
 </li>
</ul>
</p> 
<h3><a name="simplescript">Vereinfachtes Skriptbau-Verfahren</a> <small>(neu in Version 0.22beta)</small></h3>
<p>
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 
<a href=http://www.web3d.org/technicalinfo/specifications/vrml97/part1/nodesRef.html>
VRML standards</a> (zum Beispiel &uuml;ber den Men&uuml;punkt
<em>Help -> <i>Name des gerade selektierten Knoten</i></em> lesen
(oder ein entsprechendes Buch benutzen).<br>
Zum schnellen Ausprobieren kann es dagegen angenehmer sein, das
vereinfachte Skriptbau-Verfahren zu benutzen.<br>
Erzeugen Sie einen "leeren" Scriptknoten mit dem "Script" icon
(oder benutzen Sie den Men&uuml;punkt <em>Create -> Programming -> Script</em>).
<br>
Gem&auml;ss der 
<a href="http://dune.sourceforge.net/philosophy.html" target="new">
"Weg da!" Philosophie</a> des urspr&uuml;nglichen dune Projekts
dr&uuml;cken Sie einfach nur "OK" im Scripteditor Dialog (siehe oben).<br>
Jetzt wird das RouteView Fenster f&uuml;r die weitere Arbeit benutzt.
<br><br><img src=simple_scriptbuild1.jpg><br><br>
Scriptknoten haben ein spezielles "connect anything" ("verbinde alles")
eventOut.
Wenn man draufklickt, die Maustaste festh&auml;lt und die Maus verschiebt
("drag") wird eine weisse Route gezeichent
<br><br><img src=simple_scriptbuild2.jpg><br><br>
Wenn man die Maustaste gedr&uuml;ckt h&auml;lt, kann man sehen, dass man diese
Route (wie beim "normalen" Routing) an eventIns anderer Knoten anschliessen
kann,
<br><br><img src=simple_scriptbuild3.jpg><br><br>
dass aber (im Gegensatz zum "normal" Routing) die Farbe dieser Route
(also eigentlich der Datentyp) mit dem abgefragten eventIn wechselt.
<br><br><img src=simple_scriptbuild4.jpg><br><br>
Wenn man die Maustaste losl&auml;sst, wird die Route vollendet.
<br><br><img src=simple_scriptbuild5.jpg><br><br>
Entsprechend l&auml;sst sich der spezielle "connect anything" eventIn
des Scriptknotens benutzen
<br><br><img src=simple_scriptbuild6.jpg><br><br>
und mit dem eventOut eines anderen Knoten verbunden.
<br><br><img src=simple_scriptbuild7.jpg><br><br>
Jetzt m&uuml;ssen Sie noch das "url" Feld des Scriptknoten ver&auml;ndern.
Neben der Benutzung von <a href="#urledit">urledit</a> k&ouml;nnen sie
auch den Scriptknoten im SceneTree Fenster und das
"url" Feld im FieldView Fenster selektieren und dann
<br><br><img src=simple_scriptbuild8.jpg><br><br>
das "Object Edit" Icon dr&uuml;cken (oder benutzen den Men&uuml;punkt
<em>Action -> Object edit</em>). 
<br><br><img src=simple_scriptbuild9.jpg><br><br>
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&uuml;r MacOSX, "edit" f&uuml;r M$Windows)
wenn $WINEDITOR nicht beim ersten Programmlauf gesetzt war. 
Man kann die Editoreinstellung mit dem 
<em>Options -> Texteditor Settings ...</em> Men&uuml;punkt &auml;ndern. <br>
Im Edit Fenster sehen Sie ein Schema des ben&ouml;tigten javascript Codes.
<br> Benutzen Sie <em>Options -> ECMAscript settings</em> um einzustellen,
welche erweiterten Kommentare Sie im Schema haben wollen.
<br><br><img src=simple_scriptbuild10.jpg><br><br>
Benutzen Sie den Editor, um den Javascript code zu vervollst&auml;ndigen,
dann speichern und verlassen Sie den Editor
- im Fall des vi Editors benutzen Sie die Tastenkombination :wq 
</p> 
<h3><a name="nurbs">NURBS Modellierung</a> <small>
                          (zum Teil neu in Version 0.25beta)</small></h3>
<ul>
<li> <h4><a name="nurbsbasics">NURBS Grundlagen</a></h4>
<p>
In der Computergraphik bedeuten NURBS eine komplizierte Rechenvorschrift, 
mit deren Hilfe sich beliebige Fl&auml;chen und Linien/Kurven im Raum sehr 
kompakt darstellen lassen. <br>
Gerade f&uuml;r eine Netzwerkstandard wie VRML ist die Unterst&uuml;tzung 
von NURBS deshalb ein grosser Vorteil, da dabei nicht die Daten aller Eckpunkte 
eines Fl&auml;chennetzes &uuml;ber ein Netzwerk
&uuml;bertragen werden m&uuml;ssen, sondern nur eine relative kleiner
Anzahl von Zahlenwerten, mit denen die Eckpunkte berechnet werden 
k&ouml;nnen. <br>
Das lohnt sich, da in der Vergangenheit die Rechenleistung sehr viel 
st&auml;rker 
gestiegen ist als die Netzwerkgeschwindigkeit (zum Vergleich: der Rechner 
der 1969 das erste Zeichen ("L" von "LOGIN") &uuml;ber das Internetprotokoll 
&uuml;bertragen hat, war ein Honeywell DDP-516 minicomputer mit 12KB Speicher,
einer Taktfrequenz von 1.1 Mhz (wobei viele Takte f&uuml;r einen Computerbefehl
ben&ouml;tigt wurden) und dem Gewicht einer halben Tonne. Dieser
Rechner benutzte eine Netzwerkleitung mit 50000 baud. Das entspricht 
ungef&auml;hr der Rechenleistung eines einfachen Taschenrechners und der 
Netzwerkverbindung eines modernen Telefonmodems).
</p>
<p>
Piegl und Tiller schreiben in "The NURBS book", NURBS  w&auml;re ein Akronym 
f&uuml;r "Nobody Understands nonuniform Rational B-Splines" (niemand versteht 
nicht-gleichartige rationale B-Splines).<br>
Um mit einem NURBS Modeller zu arbeiten, braucht man die entsprechende
Mathematik nat&uuml;rlich nicht komplett zu verstehen. Allerdings kann
es f&uuml;r die Benutzung eines Programms wie white_dune (das Zugriff
auf alle Zahlenwerte der NURBS Fl&auml;chen/Kurven bietet) ein Einblick 
in die NURBS Grundlagen sinnvoll sein.
</p>
<p>
Erstellt man in white_dune eine NURBS-Kurve (mit 
<em> Create->VRML200x->NurbsCurve </em>/OK), verschiebt eines
der weissen K&auml;stchen und klappt alle Zahlenwerte im FieldView auf
<br><br><img src=nurbscurve.jpg><br><br>
so erkennt man, dass eine NURBS-Kurve im wesentlichen aus 4 Datenarten
besteht.
<ul>
<li>
Kontrollpunkte (controlPoint):<br>
Das sind die mit weissen K&auml;stchen markierten Punkte.
Verschiebt man ein K&auml;stchen, verschiebt sich ein Teil der Kurve
entsprechend.
<br><br><img src=controlpoint.jpg><br><br>
Kontrollpunkte sind die wichtigsten Elemente in white_dune, um NURBS
zu beeinflussen.
</li>
<li>
Gewichte (weight):<br>
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&ouml;ht man das entsprechende Gewicht
<br><br><img src=weight.jpg><br><br>
so wird die Kurve zum Kontrollpunkt hingezogen.<br>
Obwohl hier der Kontrollpunkt auf der gleichen Stelle liegt, hat sich 
sein Wert ver&auml;ndert. Das liegt daran, dass es zwei mathematisch
gleichwertige NURBS-Formeln gibt. White_dune benutzt die bei VRML 
&uuml;bliche Formel.
</li>
<li>
Knotenvektoren (knot): <br>
Knotenvektoren bestimmen unter anderem (<small>***</small>)
ob ein Kontrollpunkt von der
Kurve getroffen wird und ob eine Kante auftritt. Dazu m&uuml;ssen die
Werte an der entsprechenden Stelle "Grad" "(Ordnung -1)" mal wiederholt werden.
<br><br><img src=knot.jpg><br><br>
</li>
<li>
Ordnung (order): (auch Grad+1 (degree+1))<br>
Ueber diese Zahl wird festgelegt, wie weit der Einfluss eines 
Kontrollpunkts reicht.
<br><br><img src=order.jpg><br><br>
</li>
</ul>
Der verbliebene Wert "tessellation" hat keinen mathematischen, sondern
einen praktischen Hintergrund. Er legt fest, mit wievielen Punkten/Ecken
die Kurve dargestellt wird. 
<br><br><img src=tess3.jpg><br><br>
Das Ver&auml;ndern dieses Werts erlaubt eine einfache Anpassung an
die Graphikleistung eines Rechners.
<br><br><img src=tess11.jpg><br><br>
Per default (Wert "0") benutzt white_dune (das auch auf schwachen Rechnern 
laufen soll) bei Objekten mit sehr vielen Kontrollpunkten zu kleine Werte
f&uuml;r "tessellation".<br>
Ein Beispiel zeigt eine Nurbsfl&auml;che, die aus einer Kugel konvertiert
wurde und bei der einige Kontrollpunkte herausgezogen wurden.
<br><br><img src=tess0.jpg><br><br>
Nur mit einem hohen Wert f&uuml;r "tessellation" zeigt sich die 
"wahre" Form des Objekts.
<br><br><img src=tess181.jpg><br><br>
</p> 
</li>
<li> <h4><a name="nurbssymetric">X symetrisches Modellieren</a>
<small>(neu in Version 0.25beta)</small></h4>
<p>
Mit Dune kann man NurbsSurface Knoten erstellen 
(z.B. mit <em> Create -> VRML 200x -> NurbsSurface -> plain/OK</em>). 
Man kann die entstandene Fl&auml;che ver&auml;ndern, indem man die weissen
K&auml;stchen mit der Maus verschiebt.<br>
<br><br><img src=nurbsurface1.jpg><br><br>
Das ver&auml;ndert die Kontrolpunkte des NurbsSurface Knotens.
<br><br><img src=nurbsurface2.jpg><br><br>
Mit dieser Methode kann man dune am sinnvollsten bei der Herstellung von
Landschaften mit D&uuml;nen 
<br><br><img src=dunes.jpg><br><br>
einsetzen, die Methode ist aber nicht sehr sinnvoll f&uuml;r die meisten
anderen Aufgaben.
</p>
<p>
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&uuml;punkt 
<em>Actions -> X symetric modelling</em> erreicht werden.
Wenn dieser Men&uuml;punkt aktiviert ist, wird jede Bewegung von den
Kontrollpunkten der einen Seite
<br><br><img src=symetric1.jpg><br><br>
auf die andere Seite &uuml;bertragen,
<br><br><img src=symetric2.jpg><br><br>
und es ist ziemlich einfach, eine ziemlich komplizierte symetrische
NurbsSurface Fl&auml;che zu erzeugen.
<br><br><img src=mantasurface.jpg><br><br>

Die X Richtung f&uuml;r die symetrische Modellierung
wurde wegen des
<a href="#6Dlocal">Local Input Mode</a> gew&auml;hlt.<br>
Die Entscheidung ob der symetrische Teil eines NurbsSurface Knoten
h&auml;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&ouml;&szlig;e von "Epsilon" kann &uuml;ber
den <em>Options -> Preferences</em> Dialog eingestellt werden.<br>
Wenn symetrische Modellierung angew&auml;hlt ist, schnappen fast gleiche 
Punkte zusammen und werden zusammen bewegt.
Das kann benutzt werden, um offene NurbsSurface Fl&auml;chen zu schliessen,
aber mehrere Kontrollpunkte auf einem Platz erzeugen eine Ecke/Kante.
<br><br><img src=closedpeak.jpg><br><br>
Eine neu entstandene NurbsSurface Fl&auml;che existiert (in Einklang mit den
VRML Standards) per default nur einseitig (was wichtig ist, 
wenn die Oberfl&auml;che nicht geschlossen ist): das Feld "solid" hat den
Wert TRUE (wahr).
<br><br><img src=mantasurface1side.jpg><br><br>
In den meisten F&auml;llen ist das nicht sehr sinnvoll:
Um die Oberfl&auml;che doppelseitig zu machen, wird das Feld "solid" 
im FieldView Fenster auf FALSE (falsch) gesetzt.
<br><br><img src=mantasurface2side.jpg><br><br>
Oft ist auch eine zweiseitige Fl&auml;che nicht besonders n&uuml;tzlich, um 
einen volumin&ouml;sen K&ouml;rper zu bilden.
In diesem Fall ist es sinnvoll, einen Group- (Gruppen-)Knoten zu erzeugen,
<br><br><img src=nurbsgroup1.jpg><br><br>
den K&ouml;rper mit dem NurbsSurface Knoten in den Group-Knoten zu 
verschieben
<br><br><img src=nurbsgroup2.jpg><br><br>
und eine Kopie des K&ouml;rpers mit dem NurbsSurface Knoten
zus&auml;tzlich im Group-Knoten zu erzeugen.
Um eine Kopie anzulegen, zieht man das Shape Icon mit der Maus ins
Group icon und h&auml;lt dann die Kontroltaste ("Ctrl") gedr&uuml;ckt,
w&auml;hrend die Maustaste noch gegedr&uuml;ckt ist.
<br><br><img src=nurbsgroup3.jpg><br><br>
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&ouml;rpers ver&auml;ndert wird.
<br><br><img src=zfight1.jpg><br><br>
<b>Zu d&uuml;nne W&auml;nde</b> (auch "z-fighting" genannt). <br>
Wenn sie einen Kontrollpunkt von einem NurbsSurface Knoten etwas
nach oben verschieben, um dem K&ouml;rper mehr Volumen zu geben,
kann die bilderzeugende Hardware und Software nicht mehr so leicht 
entscheiden, welche der beiden nah aneinanderliegende Fl&auml;chen
mit welcher Farbe n&auml;her zum Betrachter angeordnet ist.
<br><br><img src=zfight2.jpg><br><br>
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 &auml;ndern.
<br>
Um das Problem zu vermeiden, m&uuml;ssen beide "solid" Felder zu TRUE
zur&uuml;ckgeschalten werden und das "ccw" ("Counter Clock Wise", "gegen
den Uhrzeitersinn") Feld muss sich zwischen der oberen und unteren 
einseitigen Fl&auml;che unterscheiden.
<br><br><img src=zfightok.jpg><br><br>
Jetzt k&ouml;nnen die nichtbegrenzenden Kontrollpunkte der NurbsSurface 
Knoten verschoben werden, um dem K&ouml;rper mehr Volumen zu geben.
Jetzt sollte man die Shape Knoten mit den NurbsSurface Knoten von einem
Group Knoten in einen NurbsGroup Knoten.
<br><br><a href="../../logo/manta.wrl"><img src=nurbsgroup4.jpg></a><br><br>
Der NurbsGroup Knoten ist im VRML Standard verantwortlich daf&uuml;r, dass
die Begrenzungen der enthaltenen NurbsSurface Knoten ohne L&uuml;cken 
gezeichnet werden,
wenn die Kontrollpunkte der Begrenzungen der NurbsSurface Knoten identisch 
sind.<br>
In white_dune, erlaubt der NurbsGroup Knoten auch X symetrische Modellierung.
&Auml;nderungen eines Kontrollpunkts werden an alle NurbsSurface Knoten
weitergegeben,
die direkt (oder &uuml;ber einem Shape Knoten) einem NurbsGroup Knoten
enthalten sind.<br>
Das macht es m&ouml;glich, die Kontrollpunkte der Begrenzungen zu verschieben
und das ganze Objekt geschlossen zu halten.
<br><br><a href="../../logo/manta2.wrl"><img src=nurbsgroup5.jpg></a><br><br>
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.
<br><br><img src=nurbsgroup6.jpg><br><br>
</p> 
</li>
<li> <h4><a name="nurbsconversion">NURBS Konversion</a>
<small>(neu in Version 0.25beta)</small></h4>
<p>
Wenn geschlossene NurbsSurface Knoten das Ziel sind, kann es n&uuml;tzlich
sein, schon mit einem geschlossenen K&ouml;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 (&uuml;ber Drehung).
<ul>
<li>
Box<br>
Um einen Box (W&uuml;rfel) Knoten in einen NurbsSurface Knoten zu konvertieren,
muss ein Box Knoten im Szenengraph angew&auml;hlt werden
<br><br><img src=box.jpg><br><br>
und der Men&uuml;punkt <em>actions -> convert to NurbsSurface</em> benutzt
werden.
<br><br><img src=box2nurbsdialog.jpg><br><br>
Wenn die "6 Plains" (6 Fl&auml;chen) Schaltfl&auml;che nicht gedr&uuml;ckt 
ist, 
wird ein einziger NurbsSurface Knoten erzeugt.
<br><br><img src=oneboxnurbs.jpg><br><br>
Wenn die "6 Plains" Schaltfl&auml;che gedr&uuml;ckt ist, werden 6 
Fl&auml;chen in einem NurbsGroup Knoten erzeugt.
<br><br><img src=sixboxnurbs.jpg><br><br>
</li>
<li>
Cone, Cylinder und Sphere<br>
Die Konversion dieser primitiven K&ouml;rper ist &auml;hnlich zu der 
Konversion eines Box Knotens, aber die Objekte werden intern mit einer
drehenden Linie (besser NurbsCurve) erzeugt.
Zum Beispiel beim Ergebnis einer Cylinder Konversion eines 
<br><br><img src=cylinder.jpg><br><br>
sieht man, dass es Kontrollpunkte gibt, die die Oberfl&auml;che 
ber&uuml;hren. Dies wird erreicht, indem Werte im Knotenvektor 
wiederholt werden. Als Konsequenz entsteht eine Kante, wenn der
Kontrollpunkt verschoben wird.
<br><br><img src=cylinderedge.jpg><br><br>
</li>
<li>
NurbsSurface aus NurbsCurve (&uuml;ber Drehung)<br>
Zur Zeit bietet dieses Methode die meisten Modellierungsm&ouml;glichkeiten. 
<br>
Zuerst muss ein NurbsCurve Knoten im 
Scenengraph angew&auml;hlt werden
<br><br><img src=nurbscurve_scenegraph.jpg><br><br>
Wenn ein NurbsCurve erzeugt wird (e.g. via <em> Create -> VRML 200x ->
NurbsCurve </em>) muss in Betracht gezogen werden,
ob X symetrische Modellierung benutzt wird.<br>
Der NurbsCurve Erzeugungsdialog 
<br><br><img src=nurbscurvedialog.jpg><br><br>
bietet drei M&ouml;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&ouml;glich. Deswegen ist es m&ouml;glicherweise
vorzuziehen, einen NurbsCurve Knoten entlang der y oder z Achse zu 
erzeugen.<br>
<br><br><img src=nurbscurverotationy.jpg><br><br>
Die Kurvenpunkte bilden die Seitenansicht des Drehk&ouml;rpers.
<br><br><img src=nurbscurverotation2.jpg><br><br>
Mit <em> Actions -> Convert to NurbsSurface</em> geht es weiter.
<br><br><img src=nurbsrotationdialog.jpg><br><br>
Um X symetrische Modellierung m&ouml;glich zu machen, sollte die
Schaltfl&auml;che  
"Flatten Curve before rotation" ("Kurve vor der Drehung abflachen ") 
gedr&uuml;ckt bleiben. Dabei werden alle Punkte in eine Ebene verschoben,
wobei der Abstand vom Nullpunkt erhalten bleibt.
<br><br><img src=nurbsrotationsurface.jpg><br><br>
Genau wie bei konvertierten Sphere, Cylinder und Cone Knoten, kann eine
Ecke entstehen, wenn die Kontrollpunkte verschoben werden.
<br><br><img src=nurbsrotationsurface2.jpg><br><br>
</li>
</ul>
</p>
<li> <h4><a name="nurbsindexedfaceset">IndexedFaceSet Knoten erzeugen</a>
<small>(new in Version 0.25beta)</small></h4>
<p>
NURBS Fl&auml;chen werden oft als abgerundete Fl&auml;chen.
Aber neben mehrfachen Kontrollpunkten und Knotvektor Werten,
kann das Setzen der u/vTesselation Wert einfach dazu benutzt werden,
um Objekte aus Einzelfl&auml;chen (IndexedFaceSet Knoten) zu erzeugen.<br>

<br><br><img src=spherefaceset1.jpg><br><br>
Wenn zum Beispiel ein Sphere Knoten mit
<em>Actions -> Convert to NurbsSurface</em> konvertiert wird
<br><br><img src=spherefaceset2.jpg><br><br>
und kleine u/vTesselation Werte gesetzt werden, 
entstehen nur sehr wenige Fl&auml;chen.
<br><br><img src=spherefaceset3.jpg><br><br>
Mit <em>Actions -> Convert nurbs to IndexedFaceSet</em> kann das Resultat
in einem IndexedFaceSet Knoten verwandelt werden.
<br><br><img src=spherefaceset4.jpg><br><br>
Um die Normalenvektoren loszuwerden, die die Farben der Fl&auml;chen
verschwimmen lassen, muss der Normal Knoten vom IndexedFaceSet Knoten
entfernt werden.

<br><br><img src=spherefaceset5.jpg><br><br>
</p>
<p>
Die folgende Tabelle zeigt, welche grunds&auml;tzlichen K&ouml;rper 
mit dem Setzen von u/vTesselation in NurbsSurface Knoten 
aus konvertierten Primitiven erzeugt werden k&ouml;nnen.
<table>
<tr><td>K&ouml;per</td><td>Konvertiert von</td><td>uTesselation</td><td>vTesselation</td></tr>
<tr><td>Tetraeder</td><td>Cone</td><td>3</td><td>4</td></tr>
<tr><td>4-eckige Pyramide</td><td>Cone</td><td>4</td><td>4</td></tr>
<tr><td>Hexaeder</td><td>Sphere/Cylinder</td><td>3</td><td>2</td></tr>
<tr><td>Octaeder</td><td>Sphere/Cylinder</td><td>4</td><td>2</td></tr>
<tr><td>n-eckiges Prisma</td><td>Cylinder</td><td>n</td><td>&gt;1</td></tr>
<tr><td></td><td></td><td></td><td></td></tr>
</table>
</p>
<p>
Die Implementierung von IndexedFaceSet in white_dune hat (noch) keine
Handles ("Anfasser", zum Beispiel weisse K&auml;stchen, die mit der
Maus verschoben werden k&ouml;nnen).
Wenn eine NurbsSurface Fl&auml;che
Plain (<em>Create -> VRML 200x -> NurbsSurface -> Plain (Nurbs)</em>)
mit Grad 1 erzeugt wird
<br><br><img src=degree1faceset1.jpg><br><br>
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&auml;re.
<br><br><img src=degree1faceset2.jpg><br><br>
Mit dem Men&uuml;punkt <em>Actions -> Convert nurbs to IndexedFaceSet</em> 
kann das Result in einen IndexedFaceSet Knoten verwandelt werden.
<br><br><img src=degree1faceset3.jpg><br><br>
Um die Normalenvektoren loszuwerden, die die Farben der Fl&auml;chen
verschwimmen lassen, muss der Normal Knoten vom IndexedFaceSet Knoten
entfernt werden.
<br><br><img src=degree1faceset4.jpg><br><br>
Ungl&uuml;cklicherweise ist die Konversion von einem IndexedFaceSet Knoten
zur&uuml;ck in einen NurbsSurface Knoten not nicht implementiert...
</p>
</li>
</ul>
<p>

</p> 
</li>
<p>

</p>
</li>
</ul>
<small>*** 
Der Knotenvektoren ist der Vektor, &uuml;ber dem die NURBS-Kurve definiert ist. 
Ohne darauf n&auml;her einzugehen, soll nur kurz und beispielhaft sein 
Einflu&szlig; 
gezeigt werden. Betrachtet man den im Bild gezeigten Knotenvektor, so 
f&auml;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.
</small>
</body>