<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <html> <head> <title>"white_dune" Dokumentation</title> </head> <body> <ul> <li> <h3><a href="#white_dune">"White_dune" was ist das ?</a></h3> </li> <li> <h3><a href="#crash">"White_dune" abgestürzt, bisherige Arbeit verloren ?</a></h3> </li> <li> <h3><a href="#languages">"White_dune" mit deutschen Menues starten</a></h3> </li> <li> <h3><a href="#vrml">Was bedeuten Szenengraph, Fieldwerte, Routes usw. ?</a></h3> </li> <li> <h3><a href="#waskann">Was "white_dune" nicht kann und was es kann</a></h3> </li> <li> <h3><a href="#fenster">Die 5 Fenster von "white_dune"</a></h3> </li> <li> <h3><a href="#navigation">Navigation</a></h3> </li> <li> <h3><a href="#scenegraph">Verändern des Szenengraph</a></h3> <ul> <li> <h4><a href="#use">Die Benutzung von USE</a>(neu in Version 0.29beta)</h4> </li> <li> <h4><a href="#scenegraphoperations">Szenengraph Operationen</a>(neu in Version 0.27beta)</h4> </li> </ul> </li> <li> <h3><a href="#route">Eingabe/Löschen von ROUTE's</a></h3> </li> <li> <h3><a href="#fields">Fieldwerte verändern</a></h3> <ul> <li> <h4><a href="#keyboard">Tastatureingabe</a></h4> </li> <li> <h4><a href="#MF">"MF"-Fieldwerte ändern</a>(neu in version 0.27beta)</h4> </li> <li> <h4><a href="#mouse">Mauseingabe</a></h4> </li> <li> <h4><a href="#3DWindow">Fieldwerte verä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ä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> <li> <h4><a href="#urledit">URL Editor</a> (new in Version 0.22beta)</h4> </li> <li> <h4><a href="#fieldpipe">Field pipe</a> (new in version 0.29beta)</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="#elevatedegree">Grad Erhöhung</a> (neu in Version 0.27beta)</h4> </li> <li> <h4><a href="#nurbsindexedfaceset">IndexedFaceSet Knoten erzeugen</a> (neu in Version 0.25beta)</h4> </li> </ul> <h3><a href="#super">Superformula Modellierung</a> (neu in Version 0.27beta)</h3> <ul> <li> <h4><a href="#superformula">Superformula Grundlagen</a></h4> </li> <li> <h4><a href="#superextrusion">SuperExtrusion</a></h4> </li> <li> <h4><a href="#supershape">SuperShape</a></h4> </li> <li> <h4><a href="#superellipsoid">SuperEllipsoid</a></h4> </li> </ul> </li> <li> <h3>Weitere Kommandos zur 3D-Modellierung</a></h3> <ul> <li> <h4><a href="#coordinate">Ändern von Coordinate basierten Knoten</a> (new in Version 0.29beta)</h4> </li> <li> <h4><a href="#array">Array Werkzeug</a> (new in Version 0.27beta)</h4> </li> </ul> </li> <li> <h3><a href="#upload"><em>Datei -> upload</em></a> (new in Version 0.27beta)</h3> </li> </li> </ul> <h2><a name="white_dune">"White_dune" was ist das ?</a></h2> <p> White_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ändern.<br> White_dune kann benutzt werden, um 3D-Modelle, Animationen und Interaktionen in VRML97 zu verbessern oder zu erstellen.<br> Als einziges 3D Modelling Werkzeug ist es verglichen mit der Konkurrenz noch etwas schwach. Es ist sinnvoll, noch zusätzlich einen statischen 3D Modeller mit VRML97 Export (wie z.B. wings3D oder Art Of Illusion) einzusetzen.<br> Der Vorteil von white_dune gegenüber den meisten anderen 3D Modellern ist, dass das Beleuchtungsmodell und der innere Aufbau von white_dune auf dem VRML97 Standard basiert. Dadurch lassen sich die Möglichkeiten von VRML97 bei einer Nachbearbeitung oder Erstellung mit white_dune besser nutzen. </p> <h3><a name="crash">"White_dune" abgestürzt, bisherige Arbeit verloren ?</a></h3> <p> White_dune ist noch in der Entwicklungsphase und es läuft noch nicht so stabil, wie es sollte.<br><br> <b>Wenn white_dune abgestürzt ist, ist die bisherige Arbeit verloren ?</b> <br><br> <font color="#FF0000"> Nein, nicht zwingend.</font> <br><br> "white_dune" versucht noch, die VRML97 Datei kurz vor dem Absturz zu speichern. Das funktioniert nicht immer, vor allem wenn der Fehler, der den Absturz verursacht hat, die interne Datenstruktur zerstört hat. Wenn die Datei erfolgreich geschrieben worden ist, schreibt white_dune unter Unix/Linux <pre> Internal Crash ! Try to save Files attempt to write file to /home/someone/.dune_crash_NUMBER_NUMBER.wrl write sucessfull </pre> auf die Standartfehlerausgabe des white_dune starteten Fensters und auf die Systemkonsole (z.B. das Fenster der "xconsole" Anwendung).<br> Unter M$Windows erscheint (ggf. nach Drücken von "ignorieren/ignore") eine entsprechende Messagebox<br> <img src=crash.jpg><br> Benutzt werden hier die Systemvariablen "%HOMEDRIVE%" und "%HOMEPATH%".<br> Wenn sie dann white_dune neu starten und das file Menü ö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.<br> </p> <p> Wenn der Fehler, der zum Absturz geführt hat, die interne Datenstruktur im Programm beschädigt hat, kann diese Methode versagen.<br> In diesem Fall lohnt es sich nach temporären Daten (".dune_*") im Verzeichnis der VRML-Datei zu suchen, die bei der Ausführung von <em>Datei->Vorschau</em> oder <em>Datei->Textedit</em> entstanden sind.<br> Diese Dateien werden bei einem normalen Programmende gelöscht, nicht aber bei einem Programmabsturz.<br> Stürtzt das Programm zum Beispiel sofort nach dem Verändern oder Erzeugen des ECMAscript Teils eines Scriptknotens im Texteditor ab, nachdem die Datei mit dem ECMAscript Programm gespeichert wurde, ist diese Datei noch im Dateisystem vorhanden. Man kann so eine Datei finden (über Namen und Erzeugungsdatum) und den Inhalt per Cut&Paste weiterverwenden. </p> <h3><a href="#german">"White_dune" mit deutschen Menues starten</a></h3> <p> Um white_dune mit deutschen Menues zu starten, muss die Kommandozeilenoption "-german" benutzt werden. Da es unpraktisch ist, das dauernd in eine Kommandozeile einzutippen, kann das über ein Shellskript (Linux/UNIX/MacOSX) oder Batchfile (M$Windows) gemacht werden.<br> Wenn Sie kein entsprechendes File (z.B. "germandune") finden, können Sie sie sich eines mit den Kommandozeilen: <ul> <li> Für Linux/UNIX:<br> <pre> echo dune -german > germandune.sh chmod +x germandune.sh </pre> </li> <li> Für Micro$oft Windows:<br> <pre> echo Laufwerk:\pfadzu\white_dune_version.exe -german > germandune.bat </pre> </li> </ul> anlegen. Für MacOSX müssen Sie in der Datei white_dune.app/Contents/MacOS/dunestarter die Zeilen mit den Optionen für den Programmstart<br> <pre> DUNEOPTIONS=" " export DUNEOPTIONS </pre> um die -german Option ergänzen:<br> <pre> DUNEOPTIONS="-german " export DUNEOPTIONS </pre> Für andere exotische UNIX desktops finden sich entsprechende Optionen in den folgenden Dateien: <ul> <li> SGI IRIX/4Dwm: desktop/irix*/duneoptions.m4<br> Lesen sie die Datei README_IRIX.desktop um mehr Informationen zu bekommen </li> <li> IBM AIX/cde: /usr/local/bin/white_dune.dt </li> <li> Sun Solaris/cde: /opt/White_Dune/bin/white_dune.dt </li> <li> Redhat Linux/kde: /usr/share/applications/dune.desktop </li> </ul> Wenn Sie sich dafür interessieren, die Menues und Fehlermeldungen von white_dune in ein neue Fremdsprache zu übersetzen (dazu sind keine Programmierfähigkeiten notwendig), dann lesen Sie bitte das <a href="../developer_docs/dune_developer.html#localisation"> Schritt fuer Schritt Kochrezept in englischer Sprache</a> in der Entwicklerdokumentation. </p> <h3><a name="vrml">Was bedeuten Szenengraph, Fieldwerte und Routes usw. ?</a></h3> <p> White_dune ist ein Lowlevel Werkzeug zum Bearbeiten von VRML97 Files. Dabei wird angenommen, dass dem Benutzer die grundlegende Struktur von VRML97 bekannt ist. <br> Ausführliche technische Informationen zu VRML97 findet man in der offiziellen ISO Spezifikation unter <a href=http://www.web3d.org/x3d/specifications/vrml/ISO-IEC-14772-IS-VRML97WithAmendment1> http://www.web3d.org/x3d/specifications/vrml/ISO-IEC-14772-IS-VRML97WithAmendment1</a>. Für die Benutzung von White_dune ist vor allem die Node Referenz <a href=http://www.web3d.org/x3d/specifications/vrml/ISO-IEC-14772-IS-VRML97WithAmendment1/part1/nodesRef.html> http://www.web3d.org/x3d/specifications/vrml/ISO-IEC-14772-IS-VRML97WithAmendment1/part1/nodesRef.html </a> wichtig.<br> Eine kurze Einführung in die VRML97 Struktur in deutscher Sprache finden Sie im Internet unter <a href=http://129.69.35.12/vrml/linuxtag/scenengraph.html> http://129.69.35.12/vrml/linuxtag/scenengraph.html</a>. Ein gutes, einfaches Tutorial über VRML97 für Einsteiger in englischer Sprache findet sich (ausser in einer Anzahl entsprechender Bücher) unter <a href=http://web3d.vapourtech.com/tutorials/vrml97/> http://web3d.vapourtech.com/tutorials/vrml97/</a>. </p> <h3><a name="waskann">Was "white_dune" nicht kann und was es kann</a></h3> <p> <ul> <li> <strong>White_dune ist (noch) kein vollständiger VRML97 Browser und kann nicht alles darstellen</strong><br> Man kann mit white_dune Interaktion und Scriptprogrammierung erstellen, aber zum Testen braucht man immer noch <em>Datei -> Vorschau</em> (oder muss das File abspeichern und dann mit einen VRML Browser aufrufen). </li> <li> <strong>Was white_dune zur Zeit (noch) fehlt ist die Unterstützung für selbst definierte neue VRML Knoten (PROTO bzw. EXTERNPROTO)</strong><br> White_dune erkennt PROTOs und schreibt PROTOs beim Speichern einer Datei unverändert zurück. Man kann neue VRML Knoten von jeweiligen PROTO-Typ einfügen und die Fieldwerte verändern (wobei bei PROTOs aus Dateien (EXTERNPROTO) die Defaultfieldwerte (noch) nicht korrekt erkannt werden). PROTOs werden im 3D Preview Fenster (noch) nicht vollständig richtig dargestellt. Es gibt auch (noch) keine Möglichkeit (ausser <em>Datei -> textedit </em>), die PROTO Definition zu verändern </li> <li> <strong>White_dune ist (noch) kein allgemein einsetzbares Modelling Tool. </strong><br> Komfortable Eingabemöglichkeiten gibt es für einfache Shapeknoten (Körper) wie Box (Würfel), Sphere (Kugel), Cone (Kegel), und Zylinder sowie Shapeknoten wie ElevationGrid (Höhenfeld) und Extrusion, aber nicht für Shapeknoten wie IndexedFaceSet (aus Einzelflächen zusammengesetzter Körper, "Mesh"), IndexedLineSet (Linienbündel) und PointSet (Punktwolke), die in der Regel aus sehr vielen Einzelwerten bestehen, für die (noch) das Konzept fehlt.<br> Der beim 3D-Modelling am häufigsten eingesetzte Körper ist die "mesh". Viele 3D-Modelling-Programme exportieren zur Zeit bei VRML97 ausschliesslich "mesh"-Daten als IndexedFaceSet.<br> </li> <li> Ein beim 3D-Modelling ebenfalls häufig eingesetzter Körper ist der "NURBS" Körper, der von white_dune unterstützt wird.<br> Shapeknoten wie NurbsSurface, NurbsCurve oder NurbsGroup gibt es im traditionellen VRML97 Standard von 1997 nicht, sie sind Teil des VRML97 Amendment 1 ("VRML97 Anhang 1") Standard von 2002.<br> Er wird zur Zeit von den VRML97 Browser bitmanagement/blaxxun cc3d/contact unterstützt, aber nicht in schlecht gewarteten VRML browsern wie cosmoplayer 2.1.<br> Für cosmoplayer existiert eine (langsame und nicht vollständige) Implementierung über ein VRML PROTO. Weitere Informationen dazu finden Sie <a href=../vrml200x_nurbssurface/index.html>hier</a>. </li> <li> White_dune erlaubt letztendlich die Konvertierung aller flächigen Körper in ein IndexedFaceSet. Ein IndexedFaceSet kann in ein IndexedLineSet, ein IndexedLineSet in ein PointSet konvertiert werden.<br> Dabei muss beachtet werden, dass diese Konvertierungen (vorerst) Einbahn-Strassen darstellen, eine Rückkonversion ist nicht innerhalb des white_dune Programms durchführbar. </li> </ul> </p> <p> Man findet einige typischen VRML Beispiele (die man in white_dune) laden kann <a href=../typical_vrml_examples/index.html>hier</a>, aber man muss sich darüber im Klaren sein, dass diese Beispiele keine Modelling- oder Animations-Features zeigen, sie zeigen hauptsächlich VRML97 Beispiele über Interaktion und Scripting. Das sind Features die in white_dune (noch) nicht korrekt angezeigt werden können.<br> Die Beispiele dienen als Ausgangsbasis, um mit white_dune interaktive 3D-Welten zu erstellen, die dann später mit einen "richtigen" VRML Browser benutzt werden können. </p> <h3><a name="fenster">Die 5 Fenster von "white_dune"</a></h3> <p> <img src=windows.png><br> Neben diversen Toolbars für Icons und Nachrichten besteht "white_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. <ul> <li> <b>Scene Tree</b><br> Dieses Fenster enthält den Szenengraphen, und zeigt damit die Struktur einer VRML Datei, die Information, wie einzelne VRML Nodes (Knoten) angeordnet sind. <br> </li> <li> <b>Field View</b><br> 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. </li> <li> <b>Route View</b><br> Dieses Fenster enthält die ROUTE's, die Informationswege mit denen sich verschiedene VRML Knoten beim Programmlauf verschiedene Nachrichten schicken können.<br> Ausgehend von den Einstellungen bei <em>Optionen -> RouteView Einstellungen</em> werden im RouteView entweder die zur Zeit bestehenden ROUTEs angezeigt (so wie in einer VRML-Datei nur die bestehenden ROUTEs abgelegt sind) oder die Routes und alle existierenden Knoten, so dass es bei kleinem VRML-Dateien einfacher ist, neue ROUTEs hinzuzufügen, während sich bei grossen VRML-Dateien ein verwirrendes Bild ergibt. </li> <li> <b>Channel View</b><br> Dieses Fenster beschäftigt sich ausschliesslich mit Interpolatorknoten. Interpolatorknoten sind in VRML97 vor allem wichtig für Animationen. <li> <b>3D Preview</b><br> 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) lückenhaft.<br> Einige Knotentypen wie "MovieTexture" und selbst definierte "EXTERNPROTO" werden überhaupt nicht dargestellt. Die Icons von Knoten, die überhaupt nicht dargestellt werden sind entweder leer (EXTERNPROTOs) oder haben einen schwarzen Rahmen. Bei den Knoten aus dem wenig verbreiteten erweiterten VRML97 Amendment 1 Standard (ISO/IEC 14772:2002) gibt es die meisten Lücken, obwohl die Knoten NurbsSurface, NurbsCurve und NurbsGroup von Amendment 1 zur Zeit für die mächtigsten 3D Modelling Features von white_dune verantwortlich sind.<br> Es sind auch nicht alle Fieldwerte richtig dargestellt, zum Beispiel bei Knotentypen wie "Text" unter Unix (besonders wenn ohne Unterstützung der GLUT Bibleothek übersetzt wird) ist die Umsetzung als "erst mal besser als gar nichts" zu verstehen. Auch die Fieldwerte des zum "Text" Knoten gehörenden "FontStyle" Knotens werden (noch) nicht richtig dargestellt.<br> Auch das Field "convex" wird (noch) ignoriert. Wird "convex" auf "false" gesetzt, werden Einbuchtungen in Flächen bei der Darstellung beachtet.<br> <img src=convex_freewrl.png> <img src=convex_dune.png><br> Korrekte und fehlerhafte Darstellung eines IndexedFaceSet mit eingebuchteten Flächen bei "convex false" in FreeWRL (links) und White_dune (rechts)<br> Das Problem mit "convex false" existiert auch bei Extrusion-basierten Knoten. Bei Extrusion-basierten Knoten existieren noch weitere Darstellungsfehler.<br> Die Darstellung von mehreren durchsichtigen Körpern hintereinander ist ebenfalls fehlerhaft.<br> Auch bei der Darstellung von PROTOs kann es zu Fehlern kommen.<br> <b>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</b>. <br> Mit <em>Datei->Vorschau</em> sollte man im Zweifelsfall einen VRML Browser starten. </li> </ul> </p> <h3><a name="navigation">Navigation</a></h3> <p> Um im 3D Preview Fenster navigieren zu können steht zur Verfügung: <ul> <li> Shift-Mouse 1: Zoom View </li> <li> ctrl-Mouse 1: Rotate View </li> <li> Shift-ctrl-Mouse 1: Move View </li> </ul> 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... <ul> <li> Alt-Mouse1: Rotate View </li> <li> Alt-Mouse2: Move View </li> <li> Alt-Mouse1-Mouse2: Zoom View </li> </ul> Ist ein 6D Eingabegerät aktiv, kann bei angewähltem Scene-Icon <img src=sceneicon.jpg> im Scene Tree Fenster je nach der Auswahl der Transformicons <img src=schieb.png> <img src=rot.png> <img=6d.png> <img src=rocket.png> <img src=hover.png> durch das VRML File navigiert werden. </p> <h3><a name="scenegraph">Verändern des Szenengraph</a></h3> <p> Einen neuen VRML node mit eine Mausklick auf das entsprechenden Icon hinzufügen ist der einfachste Weg, den Szenengraph zu ändern.<br> Um ein VRML Knoten Icon zu identifizieren, bewegen Sie den Mousezeiger über das Icon und warten Sie kurz. Ein beschreibender Text wird auf der statusbar am unteren Ende des Fensters erscheinen.<br> White_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ügen.<br> White_dune graut alle node Icons aus, die nicht eingefügt werden können.<br> <img src=node_add_invalid.jpg><br><br> Die folgende Tabelle zeigt die Anforderung für die entsprechenden Knoten im VRML97 Standard:<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 oder IndexedLineSet oder PointSet <li>Color braucht IndexedFaceSet oder IndexedLineSet oder PointSet <li>Normal braucht IndexedFaceSet <li>TextureCoordinate braucht IndexedFaceSet <li>FontStyle braucht Text <li>AudioClip braucht Sound </ul> 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.<br> 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.<br> 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.<br> Nach dem VRML97 Standard brauchen auch die Körper Knoten Box, Sphere, Cone, Cylinder, IndexedFaceSet, IndexedLineSet, PointSet, ElevationGrid, Extrusion und Text als Vorraussetzung einen Shapeknoten. Da in der Mehrzahl der Fälle bei der Benutzung dieser Shape.geometry Knoten die benötigte Struktur klar ist, wird beim Klicken auf die Icons und bei der Benutzung der <em>Erzeugen -> Koerper -> </em> Menüpunkte eine vollständige Shape-Struktur (einschliesslich eines umschliessenden Transform Knoten) aufgebaut.<br> (Neu in Version 0.29beta) Ist bei der Erzeugung so eines Shape-Knotens kein Knoten angewählt in den der Shape-Knoten passt, so wird der umschliessende Transform Knoten so aufgebaut, dass der neue Knoten direkt vor dem aktuellen Kamerapunkt erscheint). </p> <p> Die Kommandos <em>Bearbeiten -> kopieren</em>, <em>Bearbeiten -> einfügen</em> und <em>Bearbeiten -> löschen</em> arbeiten so wie die gleichen Kommandos in vielen Programmen. Wenn der letzte Mausklick in den Scene Tree geht, können Sie benutzt werden, um den Szenengraph wie erwartet zu verändern. </p> <p> Ein ungewöhnliches Kommando ist das <em>Bearbeiten -gt; Kopiere Zweig bis zur Wurzel</em> Kommando. Es kopiert alle Knoten entlang des Pfads bis zur Wurzel des aktuellen Szenengraph Zweigs in den Einfügen Puffer. Das kann sehr nützlich sein, um einen Szenengraphzweig zu duplizieren und aufzuspalten. </p> <p> Ein anderer Weg, den Szenengraph zu verändern, ist Teile davon mit der Maus herumzuschieben.<br> White_dune zeigt das Icon eines Stopschildes, wenn der Zielknoten dies nicht erlaubt.<br> <img src=scenegraphchange_invalid.jpg><br> Wenn der Zielknoten es erlaubt, benutzt white_dune den normalen Mauszeiger.<br> <img src=scenegraphchange_valid.jpg><br> Ein Ziel ist nicht eindeutig, wenn der Ziel node mehrere SF/MFNode fields hat. <br> <img src=scenegraph_multiple_target.png><br> Knoten mit mehreren Fields vom Typ SF/MFNode (zum Beispiel der collision Knoten) werden im Scenetree immer mit den entsprechenden Feldnamen dargestellt (auch wenn die Einstellungen im <em>Optionen -> Allgemeine Einstellungen...</em> Dialog anders sind), damit die Field Namen als Ziel benutzt werden können.<br> <img src=scenegraph_multiple_fields.png> </p> <p> 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:<br> <ul> <li> Verschieben: <br> keine Taste drücken oder Shift Taste drücken (das Icon bleibt unverändert) <br><img src=scenegraphchange_move.jpg><br> </li> <li> Kopieren: <br><img src=scenegraphchange_copy_ptr.jpg><br> Crtl Taste drücken (das Icon zeigt zusä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ücken (das Icon zeigt zusätzlich ein "Pfeil" Zeichen) <br><img src=scenegraphchange_link.jpg><br> </li> </ul> </p> <b><h4><a name="use">Die Benutzung von USE</a></h4></b><small>(neu in Version 0.29beta)</small><br> Neben der oben gezeigten drag and drop Methode gibt es einen weiteren Weg um das USE Konstrukt zu benutzen. Die USE Konstruktion ist so etwas wie ein ununterscheidbarer Zeiger, die nochmal-Benutzung eines bereits existierenden Knotens. Der Knoten, der ge-USE-t werden soll braucht einen DEF Namen, der mit <em>Bearbeiten -> DEF</em> zugewiesen wird. <em>Bearbeiten -> USE</em> (falls möglich) erzeugt ein neues USE des letzten ge-DEF-ten Knotens an der Stelle des angewählten Knotens.<br> Wird der ge-DEF-te Knoten geändert, ändert sich der get-USE-te Knoten ebenfalls.<br> Wird der ge-USE-te Knoten geändert, ändert sich der get-DEF-te Knoten ebenfalls.<br> In white_dune (anders wie wenn man einen Texteditor für eine VRML97 Datei benutzt), can man den ge-DEF-ten Knoten löschen. Der zuerst geschreibene ge-USE-te Knoten wird dann zum neuen ge-DEF-ten Knoten, der Grund liegt daran, dass das DEF/USE ununscheidbare Zeiger bedeuten. <br> Die Benutzung von USE ist sinnvoll, um VRML Dateien klein zu halten (was bedeutet, dass die Dateien schneller im Internet ü:bertragen werden können), erhöht die Wartbarkeit und kann von einem entsprechend programmierten VRML Browser dazu genutzt werden, dass Objekte schneller gezeichnet werden.<br> Zusätzlich Kommandos die USE benutzen sind das <a href="#array"> array Werkzeug</a> und manche der folgenden "create" Szenegraph Operationen. </p> <p> <b><h4><a name="scenegraphoperations">Szenengraph Operationen</a></b></h4><small>(new in Version 0.27beta)</small><br> Es gibt (noch) keinen Weg, um mehrere Knoten im Szenengraph zu verschieben. Als Workaround gibt es Operationen, die auf alle Knoten im Szenengraph Zweig, der dem angewälten Knoten folgt (einschliesslich des angewälten Knotens), wirken. <br> <img src=scenegraphbranch_start.png><br> Die verfügbaren Kommandos sind Sie unter dem Menupunkt <em>Aktion -> Rest des Szenegraph-Zweigs</em> erreichbar: <ul> <li> <em>Verschieben in </em><br> Dieses Kommando verschiebt die Knoten in einen "grouping node" (gruppierender Knoten) (wie Group, Transfrom usw.)<br> <img src=scenegraphbranch_transform.png><br> Es ist ebenfalls möglich, Knoten in eine neue VRML97 Datei auszulagern und diese Datei über den Inline Befehl in der aktuellen VRML97 anzusprechen, allerdings nur, wenn keine ROUTE die auszulagernden Knoten anspricht oder eine USE Konstruktion benutzt wird. </li> <li> <em>1 Ebene nach oben </em><br> Dieses Kommando verschiebt die Knoten in den gleichen Szenegraph Zweig wie der "parent node" (Eltern Knoten) des angewälten Knotens.<br> <img src=scenegraphbranch_up.png> </li> <li> <em>Erzeugen</em><br> Das Erzeugen Kommando erzeugt an jeder Stelle innerhalb des Scenengraphen an der das möglich ist, den neuen Knoten (ImageTexture, Material, Appearance, Normal usw.). Die zu erzeugenden Knoten gehören alle zum Shape Knoten. Dabei muss unterschieden werden zwischen Knoten, die zum appearance Field von Shape gehören (ImageTexture, Material und Appearance) und Knoten, die zum geometry Field von Shape gehören (Normal, TextureCoordinate). Bei Knoten, die zum appearance Field gehören, wird ein neuer Knoten bei der ersten Möglichkeit im Szenegraph angelegt und bei allen weiteren Möglichkeiten wird über USE dieser Knoten wiederverwendet. Das macht es möglich, die Farbe, die Materialeigenschaften und die Textur eines ganzen Szenegraphzweigs mit wenig Aufwand zu verändern. Bei Knoten, die zum geometry Field von Shape gehören, werden die Knoten jeweils aus den Daten des Shapes (zum Beispiel ein IndexedFaceSet) erzeugt. </li> <li> <em>Setzen</em><br> Das Setzen Kommando verändert einige Fields (creaseAngle, transparency, usw.) im Szenengraph Zweig, die den Look eines Shape Knoten beeinflussen und einfach geändert werden können. </li> <li> <em>Löschen</em><br> Das Löschen Kommando löscht einige Knoten (ImageTexture, Material, Appearance, Normal etc.) im Szenengraph Zweig. Die meisten dieser Knoten korrespondieren mit den Knoten beim <em>Erzeugen</em> Kommando, denn das <em>Erzeugen</em> Kommando kann nur dann Knoten einfügen, wenn das passende Field nicht durch einen bereits existierenden Knoten blockiert ist. Deswegen kann das <em>Löschen</em> Kommando der erste Schritt sein, um Werte im Szenengraphzweig zu verändern. </li> <li> <em>Zeige Polygon/Primitivzahl in der Anzeigeleiste</em> Dieses Kommando ist ein Informationskommando und ändert nichts im Szenegraph. Es kann dazu benutzt werden um den Teil des Szenegraphen zu finden, der den grössten Teil der Polygone/Primitive enthält. Das ist sehr wichtig um Performance Probleme in Realtime 3D Daten zu finden. Primitive sind Knoten wie Box (Quader), Cone (Kegel), Cylinder (Zylinder) und Sphere (Kugel). Bei Primitiven hägt Zahl der benutzten Polygone vom benutzten VRML Browser ab. Zum Beispiel kann ein VRML Browser 16 Polygone benutzen, um die obere Fläche eines Zylinders für einen bei schlechter Qualität darzustellen oder 32 Polygone bei besserer Qualität.<br> Um den Teil im Szenengraph zu finden, der die grösste Anzahl von Polygonen/Primitive hat, kann ein Binärer Suchalgorithmus verwendet werden:<br> <ul> <nl> Klicke das Scene Icon an der Wurzel des Szenengraph an und benutze <em>Aktion -> Rest des Szenengraph Zweigs -> Zeige Polygon-/Primitiv-Zahl in der Anzeigeleiste</em>. Angezeigt wird die Zahl der Polygone/Primitiven in der ganzen VRML Datei. </nl> <nl> Wählen Sie einen Knoten an, der ungefähr in der Mitte des aktuellen Bereichs des Szenengraph Zweigs ist und benutzen Sie <em>Aktion -> Rest des Szenengraph Zweigs -> Zeige Polygon-/Primitiv-Zahl in der Anzeigeleiste</em>.<br> Wenn die Nummer grö:sser ist als die Hälfte des Results des letzten Kommandos, dann ist die Mehrheit der Polygone/Primitiven im oberen Teil des aktuellen Bereichs des Szenengraph Zweigs.<br> Wenn die Nummer kleiner ist als die Hälfte des Results des letzten Kommandos, dann ist die Mehrheit der Polygone/Primitiven im unteren Teil des aktuellen Bereichs des Szenengraph Zweigs.<br> Fahren sie mit dem Schema bei der Mitte des verbleibenden Bereichs des letzten Befehls weiter zu machen, fort bis man entweder den Knoten oder den Bereich von Knoten gefunden hat, die die meisten Polygone/Primitive in der Datei enthält. </nl> <nl> Der Knoten (oder Bereich von Knoten) (z.B. wenn es ein Group oder Transform Knoten ist) kann seinerseitz andere Knoten enthalten. Wenn sie auf das Pluszeichen im Szenenbaum klicken können ö:ffnet sich ein neuer Bereich des Szenenbaum. Wenn weiter nach dem Teil mit den meisten Polygonen/Primitiven gesucht werden soll, benutzen Sie <em>Aktion -> Rest des Szenengraph Zweigs -> Zeige Polygon-/Primitiv-Zahl in der Anzeigeleiste</em>. und machen Sie mit dem 2. Schritt weiter. </nl> </ul> </li> </ul> Leider sind einige dieser Operationen (noch) sehr langsam. </p> <h3><a name="route">Eingabe/Löschen von ROUTE's</a></h3> <p> In white_dune gibt es zwei verschiedene Einstellungen, die entscheiden, wie eine ROUTE eingegeben werden kann. <ul> <li> In <em> Optionen -> RouteView Einstellungen...</em> ist das Kästchen für "Zeige alle Knoten im Routeview" angeklickt:<br> Alle Knoten in der Szene werden im Routeview angezeigt.<br> Das ist sinnvoll für die Arbeit mit kleinen VRML Dateien, aber nicht für VRML Dateien mit vielen Knoten, dann kann es schwierig werden, das richtige Icon zu finden. </li> <li> In <em> Optionen -> RouteView Einstellungen...</em> ist das Kästchen für "Zeige alle Knoten im Routeview" nicht angeklickt:<br> Nur Knoten mit existierenden ROUTEs werden im Routeview gezeigt.<br> Um einen Knoten ohne ROUTEs im Routeview erscheinen zu lassen, muss man den entsprechenden Knoten im Scene Tree anwählen und dann das <em>Route -> Zeige Knoten ganz oben</em> Kommando verwenden. </li> </ul> </p> <p> ROUTEs werden in white_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. <br> <img src=routemake1.jpg><img src=routemake2.jpg> <br> Es können (wie im VRML Standard verlangt) nur Events mit gleichen Datentypen (gleiche Farbe der Kästchen) verbunden werden.<br> Zum Löschen der ROUTEs kann die Linie einfach durchgestrichen werden.<br> <img src=routecut1.jpg><img src=routecut2.jpg><br> Als Vorschlag für Anfänger sind einige Event-Kästchen mit einem kleinen roten Punkt markiert. Der rote Punkt zeigt wichtige/oft benutzte Events.<br> Natürlich hängt die Wichtigkeit/Benutzungshäufigkeit eines Events vom Thema der VRML Welt ab. Alle Sensor Knoten (die eigentlich Quelle bei der Verarbeitung der meisten Events) haben mit roten Punkten markierte Event-Kästchen. </p> <p> Bei komplexen VRML Welten mit vielen Objekten (zum Beispiel dem VRML Export aus einem 3D-Modelling-Programms wie Wings3D, Blender, AOI, Catia, 3D Studio Max, Maya usw.) kann es sehr schwierig werden, die gewüschten VRML Knoten im RouteView Fenster wiederzufinden. <br><img src=routeview_full.png><br> Es gibt Befehle, um zum angewälten Knoten zu springen (mit <em>Routes -> Kein Zoom/Sprung zur Auswahl</em>) <br><img src=routeview_jump.png><br> oder die Ansicht des Routeview zu vergrössern (mit <em>Routes -> Herauszoomen</em>) <br><img src=routeview_zoom.png><br> aber in diesem Fall empfiehlt sich der Einsatz des Inline VRML-Knotens. Damit ist es möglich ist statische Objekte (die zum Beispiel Teil der Umgebung oder Teil von starren Objekten sind) in eigene VRML Dateien auszulagern, so dass die gesamte VRML-Welt nur noch aus sehr wenigen VRML Knoten besteht. <br><img src=routeview_inline.png><br> </p> <p> <b>Befehle, die automatisch ROUTEs erzeugen</b><br> Es gibt zwei Befehle, die automatisch neue ROUTEs erzeugen. <ul> <li> <em> Aktion -> Animation erstellen </em><br> Hierbei werden die ROUTEs <br> TimeSensor -> *Interpolator -> angewälter Knoten<br> erzeugt. Es öffnet sich ein Dialog, der fragt, ob ein neuer TimeSensor oder ob ein bereits existierender TimeSensor benutzt werden soll. Der Dialog fragt auch danach, welches Zielevent (Field) im angewählten Knoten benutzt werden soll. Nach dem Typ des Zielevents richtet es sich, welcher Interpolator erzeugt wird: <ul> <li> SFFloat: ScalarInterpolator </li> <li> SFVec3f: PositionInterpolator </li> <li> SFRotation: OrientationInterpolator </li> <li> SFColor: ColorInterpolator </li> <li> MFVec3f: CoordinateInterpolator (ausser der Zielknoten ist ein Normal Knoten ist und es wird deswegen ein NormalInterpolator erzeugt) </li> </ul> Wenn der Inhalt des Zielevents ermittelt werden kann, wird ein erster Eintrag in den Interpolator mit key=0.0 und keyValue=wert_zielfeld erzeugt. </li> <li> <em> Aktion -> Interaktion erstellen </em><small>(neu in Version 0.29beta)<br></small> Hierbei werden die ROUTE <br> Sensor -> angewälter Knoten<br> erzeugt.<br> Da es in der Regel mehrere Zielevents im angewählten Knoten gibt und anders als bei den Interpolatoren die Zuordnung Zielevent zu Sensor oft nicht eindeutig ist, ergeben sich sehr viele Möglichkeiten, von denen viele nur selten einen Sinn ergeben. Deswegen gibt es zwei Listboxen: eine Listbox mit dem zwischen empfohlenen Zielevents und allen Zielevents ausgewählt werden kann, und eine Listbox, mit der bereits existierende Sensoren ausgewählt werden können.<br> In einem Fenster werden entsprechend der Auswahl in den Listboxen anklickbare Kästchen für alle Sensorevent/Zielevent Kombinationen dargestellt, aus denen die neue Interaktion ausgewält werden kann. </li> </ul> </p> <h3><a name="fields">Fieldwerte verändern</a></h3> <p> Es gibt mehrere Möglichkeiten, Fieldwerte zu verändern:<br> <ul> <li> <b><a name="keyboard">Tastatureingabe</a></b><br> Ü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. </li> <li> <b><a name="mouse">Mauseingabe</a></b><br> Ü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.<br> <img src=fieldchange.jpg><br> </li> <li> <b><a name="MF">"MF"-Fieldwerte ändern</a></b><small>(new in version 0.27beta)</small><br> Im Fieldview Window, markiert ein "+"-Zeichen auf der linken Seite ein "MF"-field wie MFFloat, MFInt32, MFVec3f, MFRotation, MFString usw. "MF"-Fields sind Datenfelder, man kann den Inhalt abzählen: ein, zwei, drei usw.<br> Um ein "MF"-Field anzuschauen/zu verändern, muss man auf das "+"-Zeichen auf der linken Seite klicken.<br> Wie in einer VRML Datei wird ein "MF"-field mit nur einem Dateneintrag ähnlich behandelt wie ein normales "SF"-Field mit nur einem Datum.<br> Um Daten zu einem "MF"-field hinzuzufügen, muss man auf die zweite Spalte von "+"-Zeichen klicken. Dann wird ein neuer Dateneintrag in die nächste Stelle im Datenfeld eingefügt.<br> Um Daten an erster Stelle einzufügen, muss man im geöffneten "MF"-field auf die rechte Seite des FieldView Fensters über dem ersten Eintrag klicken.<br> Um von einem "MF"-Field zu löschen, muss auf die linke Seite des FieldView Fensters in der Reihe mit dem zu löschenden Dateneintrag klicken und danach den Menüpunkt <em>Bearbeiten -> Loeschen</em> benutzen. </li> <li> <b><a name="3DWindow">Fieldwerte verändern im 3D Preview Fenster</a></b><br> Veränderungen im 3D Preview Fenster bedeuten auch eine Veränderung der Fieldwerte. Hauptsächlich wird dabei ein Transformknoten verä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.png> </li> <li> Drehung <img src=rot.png> </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önnen, wenn kein Transformknoten <img src=transform2.jpg> im entsprechenden Zweig des Szenengraphs vorhanden ist</strong>.<br> 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 Box, Cone, Cylinder, Sphere, ElevationGrid, Extrusion, PointLight oder den VRML97 Amendment 1 NurbSurface/NurbsCurve Knoten. </li> <li> <b><a name="6D">6D Input</a></b> <small>(neu in Version 0.19beta)</small><br> Seit Version 0.19beta unterstützt White_dune 6D Eingabegeräte (6D bezieht sich auf die 6 Freiheitsgrade) unter Unix/Linux.<br> Ist ein 6D Eingabegerät konfiguriert und das Icon <img src=6d.png> gedrückt, kann ein Transform-Knoten (und die darin enthaltenen Objekte) in allen 6 Freiheitsgraden bewegt werden. Das Icon <img src=schieb.png> beschränkt sich auf Verschiebung, das Icon <img src=rot.png> auf Drehung. <br> Das klassische 6D Eingabegerä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ü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äte funktioniert (noch) ausschliesslich über Kommandozeilenparameter. Dabei muss neben der Art des Eingabegeräts auch die Skalierung (Multiplikation) der Eingabewerte angegeben werden, zum Beispiel: <br> <pre> white_dune -xinput spaceball -allxyz=20,200 -allrot=40,400 </pre> <br> Es ist auch möglich, den Einfluss der Eingabegeräte zu vergrössern/verkleinern während das Programm läuft. Benutzen Sie <em>Modus -> Eingabegeraet -> Vergroessere Eingabegeraet-Daten</em> (icon <img src=faster.png>) oder <em>Modus -> Eingabegeraet -> Verkleinere Eingabegeraet-Daten</em> (icon <img src=slower.png>). <br> Wenn die Bewegung auf Verschiegungen (<img src=schieb.png>) begrenzt wird, wird nur der "allxyz" Bereich verändert. Wenn die Bewegung auf Drehungen (<img src=rot.png>) begrenzt wird, wird nur der "allrot" Bereich verändert. <br> 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 <a href=white_dune.1.html#lbAF>man page</a> zu finden. <br> 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<br> <img src=dials_default.jpg><br> Über Kommandozeilenparameter <br> <pre> white_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.png> gedrü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ü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ü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. <br> Ein ähnlicher Bewegungsmodus ist der rocket <img src=rocket.png> (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.<br> Ein anderer ähnlicher Bewegungsmodus ist der hover <img src=hover.png> (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.<br> Andere Bewegungsmodi, die im lokalen Modus arbeiten (Änderungen nur in Richtung der lokalen Achsen), sind der scale <img src=scale.jpg> (Skalierung) und changing center <img src=center.jpg> (Zentrum verändern) Modus. </li> <li> <b><a name="joystick">Linux joystick Input:</a></b><br> 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. <ul> <li> 6D Joysticks (z.B. Labtec Spaceball) sind wie alle anderen 6D Eingabegerä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.png>, Drehung <img src=rot.png>, Skalierung <img src=scale.jpg> und Mittelpunktsverschiebung <img src=center.jpg> unterstützen sie noch hover <img src=hover.png> (schwebe) Modus und rocket <img src=rocket.png> (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 ü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ügend Achsen für eine 3D Eingabe zur Verfügung. Deshalb muss zwischen einer Interpretation der 2. Achse als z-Richtung (near/far <img src=near_far.png> (nah-fern) Modus) und als y-Richtung (up/down <img src=up_down.png> (oben-unten) Modus) über die Icons umgeschaltet werden. <br> Bei Drehungen bedeutet der near/far <img src=near_far.png> (nah-fern) Modus eine Drehung um die y-Achse, der up/down <img src=up_down.png> (oben-unten) Modus eine Drehung um die z-Achse.<br> </li> <li> Der rocket <img src=rocket.png> (Racketen) Modus benö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.png> (nah-fern) Modus und up/down <img src=up_down.png> (oben-unten) Modus benutzt.<br> Beim 2D Joystick steht der rocket <img src=rocket.png> (Racketen) Modus nicht zur Verfü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ä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> white_dune -joystick /dev/input/js0 -axes=3 </pre> <br> 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. <br> <pre> white_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ä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ützung für einen M$Windows joystick ist sehr ähnlich zum Linux joystick.<br> 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.<br> 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...).<br> 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: <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ändern im ChannelView Window</a></b><br> 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.<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ählt einen passenden Zwischenwert der Ausgabewerten, der in andere VRML-Knoten geleitet werden kann, so dass eine Animation ruckfrei ablä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 zum Beispiel, 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.<br> <ul> <li> Einfach benutzbar sind alle SF-Interpolatoren: <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öglichkeiten. </li> </ul> <li> Die folgenden MF-Interpolatoren sind nicht so einfach im ChannelView darstellbar, es würde eine grosse Menge an Daten geben, die das Fenster einfach überfluten würden. Deswegen werden nur Veränderungen über die Zeit dargestellt. Wenn es keine Veränderungen gibt, wird der erste Wert immer dargestellt<br> <img src=morphing_start.png><br> um es zu erlauben, dass zusätzliche Werte mit der Maus eingetragen werden können <br> <img src=morphing_last.png><br> (zum Beispiel um den ersten Zeitschritt als letzten Zeitschritt zu wiederholen)<br>. <img src=morphing_result.png><br> Es gibt eine obere Grenze der Zahl der dargestellten Werte. Unter "Limit keys in Channelview" im <em>Optionen -> Allgemeine Einstellungen</em> dialog lässt sie sich ändern. Setzen Sie diese Grenze entsprechend der Geschwindigkeit Ihres Systems. <ul> <li> CoordinateInterpolator:<br> Interpoliert typischerweise zwischen den Positionen von Punkten eines IndexFaceSet.<br> 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 normalerweise "Morphing". </li> <li> NormalInterpolator:<br> Interpoliert zwischen den Oberflächennormalen eines aus Einzelflaechen zusammengesetzten Körpers. <br> Das heisst das pro Punkt (oder Polygon) eines zusammengesetzten Körpers und Zeitschritt ein 3D Vektor Wert eingetragen werden muss. </li> </ul> </li> </ul> Bestimmte einfache Interpolator-Animationen könnnen in White_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.<br><br> Damit mit den Werkzeugen <img src=recording.jpg> wie mit einem Kassettenrecorder Animationen aufgenommen und abgespielt werden können sind folgende Vorraussetzungen nötig: <ul> <li> Es müssen ROUTEs in der Form <br> <pre> ROUTE TimeSensor.fraction_changed TO ???Interpolator.set_fraction ROUTE ???Interpolator.value_changed TO ???.set_??? </pre> 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össer oder gleich dem Fieldwert "stoptime" des Timesensor-Knoten sein. </li> </ul><br> Seit Version 0.27beta existiert in white_dune der Menüpunkt <em>Aktion -> Animation erstellen</em>, der genau diese Struktur für den angewälten Knoten erzeugt, wenn dieser Knoten EventIn/ExposedField-Felder hat, für die ein Interpolator existiert. Im entsprechenden Dialog wird nachgefragt, <br><img src=animationdialog.jpg><br> ob ein neuer TimeSensor mit einer bestimmten Animationsdauer erzeugt werden soll bzw. ob ein bestehender TimeSensor wiederverwendet werden soll und welche Felder animiert werden sollen. <br> Wird beim Erstellen einer Animation nur das Aufnahmeicon gedrückt <img src="recording_one.jpg">, muss der Zeitcursor jeweils verändert werden und danach der entsprechende Wert (über Tastatur, Maus oder u. U. 6D Eingabegerät) verändert werden.<br> <img src="animation_onetime.png"> <br><br> <img src="animation_onetime2.png"> <br><br> Wird das Aufnahmeicon zusammen mit dem Abspielicon gedrückt <img src="recording.jpg">, wird dauernd die Veränderung der Werte (durch <a href="#mouse">Mauseingabe</a> oder u. U. 6D Eingabegerät) aufgenommen. <br> <img src="animation_recording.jpg"> <br> Die Mauseingabe bei der Aufname erfordert eine ruhige Hand. Es ist nicht ungewö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ähen und den Menüepunkt <em>Bearbeiten -> Loeschen </em> bzw. das Löschen Icon benutzen. <br> <img src="delete_keys2.jpg"> <br> Dadurch werden die entsprechenden Werte gelö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ü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.<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ählen.<br> e <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ügung steht...<br> Über den "OK" Button kehrt man zum normalen FieldView Fenster zurück. </li> <li> <b><a name="scriptedit">Script Editor</a></b> <small>(neu in Version 0.22beta)</small><br> Es gibt zwei Möglichkeiten, den Scripteditor zu starten:<br> <img src=scriptedit_icon1.jpg><br> <ul> <li> Um einen neuen Scriptknoten zu erzeugen:<br> Über das "Script" icon (Menüpunkt <em>Erzeugen -> Programmierung -> Script</em>), </li> <li> Um einen selektierten Scriptknoten zu verändern:<br> Über das "Object Edit" icon (Menüpunkt <em>Aktion -> Objekt editieren</em>), </li> </ul> Der geöffnete Scripteditor Dialog<br> <img src=scripteditor.jpg><br> erlaubt es, neue Felder/Events zum Scriptknoten hinzuzufügen (add), sie zu verändern (change) oder zu löschen (delete).<br> Drü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ändert werden (edit). Über den Menüpunkt <em>Optionen -> Text/Objekteditor Einstellungen</em> kann der Texteditor ausgewählt werden.<br> Ist das "url"-Feld leer, wird ein Schema eines ECMAscripts erzeugt.<br> Um den Texteditor zu starten, muss ein Script Knoten angewählt werden und das "URL editieren" icon (oder Menuepunkt <em>Aktion -> URL editieren</em> benutzt werden).<br> <img src=urledit.jpg><br> </li> <li> <b><a name="fieldpipe">Field pipe</a></b><small>(neu in version 0.29beta)</small> Einer der mächtigsten Möglichkeiten um Feldwerte zu ändern ist die Field pipe. Damit ist es möglich, Feldwerte mit einem beliebigen externen Programm zu verändern.<br> Im Normalfall hat man dieses externe Programm noch nicht, die Field pipe ist also vor allem wichtig für einen Benutzer mit Programmierfähigkeiten.<br> Wenn ein SF-Field oder MF-Field im Fieldview Fenster angewählt ist und <em>Aktion -> field pipe</em> benutzt wird, dann wird im Fall eines SF-Field eine Zeile mit dem Fieldwert in eine Datei geschrieben. Im Fall eines MF-Field werden genausoviele Zeilen wie die Zahl der SF-Werte im MF-Field geschrieben.<br> Wird zum Beispiel das folgende TextureTransform.scale Field<br> <img src=sffieldpipeselect.jpg><br> (ein SFVec2f Field) angewählt, werden die Werte<br> <pre> 1 1 </pre> in die Datei geschrieben.<br> Wird zum Beispiel das folgende Color.color Field <br> <img src=mffieldpipeselect.jpg><br> (ein MFColor Field) angewählt, werden die Werte<br> <pre> 0 0.5 0 0.5 0 0 0 0 0.5 0.5 0.5 0 0.5 0 0.5 0 0.5 0.5 </pre> in die Datei geschrieben.<br> Die Datei endet mit dem Zeichen für eine neue Zeile.<br> Wenn <em>Aktion -> field pipe</em> benutzt wird, öffnet sich ein Dialog, der nach eine Kommandozeile fragt. Diese Kommandozeile kann benutzt werden um ein kompiliertes Programm (zum Beispiel geschrieben Programmier Sprachen wie Ada, C, C++ oder Fortran) oder einen Interpreter mit einem Programm in einer interpretierten Sprache (zum Beispiel geschrieben in einer Programmiersprache wie awk, perl or python) zu starten.<br> Die Kommandzeile wir intern gestart mit<br> <pre> Kommandozeile < file > outputfile </pre> was dazu führt, dass jede Zeile der Datei file als Standardeingabe mit der Kommandozeile verarbeitet wird und das Ergebnis von der Standartausgabe in der Datei outputfile geschrieben wird.<br> Wenn die geschriebene Datei outputfile die gleiche oder passende Struktur wie die das verarbeitete field/die Eingabedatei hat (zum Beispiel fuer das SFVec3f Beispiel)<br> <pre> 2 1 </pre> oder fuer das MFColor Beispiel<br> <pre> 1 0.5 0 0.5 1 0 0 0 0.5 0.5 0.5 0 0.5 0 0.5 0 0.5 0.5 </pre> Dabei ist es wichtig, dass Farbwert Fliesskommazahlen im Bereich 0 bis 1 sind. Der Inhalt der Ausgabedatei wird als neuer Field-Wert benutzt und die zwischenzeitlich angelegten Eingabe/Ausgabe-Dateien werden gelöscht.<br> Das allereinfachste Beispiel einer field pipe ist die Benutzung des "echo" Systemkommandos.<br> Die Kommandozeile<br> <pre> echo ir gend was </pre> gibt einfach die Argumente<br> <pre> ir gend was </pre> zurück. In einem einfachen Beispiel kann das genutzt werden, um die Werte "1 1" in "2 1" durch Benutzung von<br> <pre> echo 2 1 </pre> als die Kommandozeile im Field pipe dialog zu verändern.<br> Für das folgende kompliziertere (aber auch sinnvollere) Beispiel wird die awk Programmiersprache benutzt. Awk ist eine interpretierte Sprache, die ziemlich ähnlich wie die Programmiersprache C aussieht. Awk ist sehr praktisch für diesen Zweck, denn es zerhackt eine Eingabezeile automatisch in einzelne Werte und man kann komplette Programme in der Eingabezeile angeben.<br> Wird die folgende Kommandozeile<br> <pre> awk '{print $1 + 0.1 , $2 + 0.2 , $3 + 0.35}' </pre> als Field pipe für das folgende MFColor Feld<br> <pre> 0 0.5 0 0.5 0 0 0 0 0.5 0.5 0.5 0 0.5 0 0.5 0 0.5 0.5 </pre> benutzt, dann ist das Resultat<br> <pre> 0.1 0.7 0.35 0.6 0.2 0.35 0.1 0.2 0.85 0.6 0.7 0.35 0.6 0.2 0.85 0.1 0.7 0.85 </pre> Wird dieses MFColor Feld für die Farben der Ecken eines IndexedFaceSet Würfels benutzt, dann werden alles Farben ein bisschen heller, ein bisschen grüner und blauer.<br> <img src=mffieldpiperesult.jpg><br> Das gleiche Beispiel in der Sprache C erfordert, dass man ein Programm wie das folgende schreibt:<br> <pre> #include <stdio.h> int main(int argc, char** argv) { while(!feof(stdin)) { float c1, c2, c3; scanf("%f %f %f", &c1, &c2, &c3); printf("%g %g %g\n", c1 + 0.1, c2 + 0.2, c3 + 0.35); } return 0; } </pre> Dieses Programm muss kompiliert werden, wenn zum Beispiel diese Datei main.c genannt wird, dann braucht man ein Kommando wie<br> <pre> cc -o /tmp/a.exe main.c </pre> auf der Kommandozeile) und man müsste sowas wie <br> <pre> /tmp/a.exe </pre> im Field pipe Dialog benutzen. </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 <a href=http://www.web3d.org/x3d/specifications/vrml/ISO-IEC-14772-IS-VRML97WithAmendment1/part1/nodesRef.html> die Knotenbeschreibung des VRML standards</a> (zum Beispiel über den Menü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üpunkt <em>Erzeugen -> Programmierung -> Script</em>). <br> Gemäss der <a href="http://dune.sourceforge.net/philosophy.html" target="new"> "Weg da!" Philosophie</a> des ursprünglichen dune Projekts drücken Sie einfach nur "OK" im Scripteditor Dialog (siehe oben).<br> Jetzt wird das RouteView Fenster fü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ä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ückt hä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ässt, wird die Route vollendet. <br><br><img src=simple_scriptbuild5.jpg><br><br> Entsprechend lä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üssen Sie noch das "url" Feld des Scriptknoten verändern. Neben der Benutzung von <a href="#urledit">urledit</a> kö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ücken (oder benutzen den Menüpunkt <em>Aktion -> Objekt editieren</em>). <br><br><img src=simple_scriptbuild9.jpg><br><br> Nun wird "white_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 <em>Options -> Texteditor Settings ...</em> Menüpunkt ändern. <br> Im Edit Fenster sehen Sie ein Schema des benö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ä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ächen und Linien/Kurven im Raum sehr kompakt darstellen lassen. <br> 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. <br> 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). </p> <p> 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).<br> 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. </p> <p> Erstellt man in white_dune eine NURBS-Kurve (mit <em>Erzeugen->VRML97 Amendment 1->NurbsCurve </em>/OK), verschiebt eines der weissen Kä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ästchen markierten Punkte. Verschiebt man ein Kä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ö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ändert. Das liegt daran, dass es zwei mathematisch gleichwertige NURBS-Formeln gibt. White_dune benutzt die bei VRML ü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ü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ä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ür "tessellation".<br> Ein Beispiel zeigt eine Nurbsflä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ü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 White_dune kann man NurbsSurface Knoten erstellen (z.B. mit <em>Erzeugen -> VRML97 Amendment 1 -> NurbsSurface -> plain/OK</em>). Man kann die entstandene Fläche verändern, indem man die weissen Kästchen mit der Maus verschiebt.<br> <br><br><img src=nurbsurface1.jpg><br><br> Das verändert die Kontrolpunkte des NurbsSurface Knotens. <br><br><img src=nurbsurface2.jpg><br><br> Mit dieser Methode kann man white_dune am sinnvollsten bei der Herstellung von Landschaften mit Dünen <br><br><img src=dunes.jpg><br><br> einsetzen, die Methode ist aber nicht sehr sinnvoll für die meisten anderen Aufgaben. </p> <p> Viele 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 <em>Aktion -> X symetric modelling</em> erreicht werden. Wenn dieser Menüpunkt aktiviert ist, wird jede Bewegung von den Kontrollpunkten der einen Seite <br><br><img src=symetric1.jpg><br><br> auf die andere Seite übertragen, <br><br><img src=symetric2.jpg><br><br> und es ist ziemlich einfach, eine ziemlich komplizierte symetrische NurbsSurface Fläche zu erzeugen. <br><br><img src=mantasurface.jpg><br><br> Die X Richtung für die symetrische Modellierung wurde wegen des <a href="#6Dlocal">Local Input Mode</a> gewählt. </p> <p> Es ist möglich, das Verschieben der Kontrollpunkte auf eine Linie oder Fläche zu beschränkten.<br> Wird nur eine der Settings <em>Modus -> nur x</em>, <em>Modus -> nur y</em> oder <em>Modus -> nur z</em> (bzw. ihre Icons mit jeweils einem Pfeil in x (rot), y (gruen) oder z (blau)) benutzt, so lassen sich die Punkte nur in dieser Richtung verschieben. Dabei wird allerdings nicht die Ausrichtung im gesamten Raum benutzt, sondern die Ausrichtung der entsprechenden Geometrie. Es ändert sich also einweder nur der x, der y oder der z Wert des verschobenen Kontrollpunkts.<br> Ist zum Beispiel nur <em>Modus -> nur y</em> bzw. das zweite der Pfeilicons benutzt <br><br><img src=yonly.jpg><br><br> ist die Bewegung der Kontrollpunkte auf die y-Richtung beschränkt. Das ist auch die Richtung, auf die der grüne Pfeil des letzten für den entsprechenden Körper zuständigen Transform-Knotens zeigt. <br><br><img src=yonly1.jpg> <img src=yonly2.jpg><br><br> Werden zwei der Settings <em>Modus -> nur x</em>, <em>Modus -> nur y</em> oder <em>Modus -> nur z</em> (bzw. ihre Icons mit jeweils einem Pfeil für die x (rot), y (gruen) oder z (blau) Richtung) benutzt, so lassen sich die Punkte innerhalb der entsprechenden Ebene verschieben.<br> Ist zum Beispiel nur <em>Modus -> nur x</em> und <em>Modus -> nur z</em> bzw. das Erste und das Dritte der Pfeilicons benutzt <br><br><img src=xzonly.jpg><br><br> ist die Bewegung der Kontrollpunkte auf die xz-Ebene beschränkt.<br> Sind alle oder kein Icon benutzt, <br><br><img src=no_only.jpg> <img src=xyzonly.jpg><br><br> dann besteht keine Beschränkung, bei einem Verschieben mit der Maus können sowohl die x, y und z Werte geändert werden. </p> <p> Die Entscheidung ob der symetrische Teil eines NurbsSurface Knoten mitbewegt wird, hängt von der Entscheidung ab, 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 <em>Options -> Preferences</em> Dialog eingestellt werden.<br> 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. <br><br><img src=closedpeak.jpg><br><br> 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). <br><br><img src=mantasurface1side.jpg><br><br> 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. <br><br><img src=mantasurface2side.jpg><br><br> 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, <br><br><img src=nurbsgroup1.jpg><br><br> den Körper mit dem NurbsSurface Knoten in den Group-Knoten zu verschieben <br><br><img src=nurbsgroup2.jpg><br><br> 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. <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örpers verändert wird. <br><br><img src=zfight1.jpg><br><br> <b>Zu dünne Wände</b> (auch "z-fighting" genannt). <br> 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. <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 ändern. <br> 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. <br><br><img src=zfightok.jpg><br><br> 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. <br><br><a href="../../logo/manta.wrl"><img src=nurbsgroup4.jpg></a><br><br> 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.<br> 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.<br> Das macht es mö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ü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 (als Rotationskörper) zu konvertieren.<br> Seit Version 0.27beta erlaubt es white_dune auch einen NurbsCurve Knoten in ein Superextrusion PROTO (siehe unten) zu konvertieren und erlaubt es, ein SuperEllipsoid PROTO oder SuperShape PROTO (siehe unten) in einen NurbsSurface Knoten zu konvertieren (durch Annäherung). <ul> <li> Box<br> Um einen Box (Würfel) Knoten in einen NurbsSurface Knoten zu konvertieren, muss ein Box Knoten im Szenengraph angewählt werden <br><br><img src=box.jpg><br><br> und der Menüpunkt <em>Konvertieren -> convert to NurbsSurface</em> benutzt werden. <br><br><img src=box2nurbsdialog.jpg><br><br> Wenn die "6 Plains" (6 Flächen) Schaltfläche nicht gedrückt ist, wird ein einziger NurbsSurface Knoten erzeugt. <br><br><img src=oneboxnurbs.jpg><br><br> Wenn die "6 Plains" Schaltfläche gedrückt ist, werden 6 Flä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örper ist ä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äche berü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 (über Drehung)<br> Zur Zeit bietet dieses Methode die meisten Modellierungsmöglichkeiten. <br> Zuerst muss ein NurbsCurve Knoten im Scenengraph angewählt werden <br><br><img src=nurbscurve_scenegraph.jpg><br><br> Wenn ein NurbsCurve Knoten erzeugt wird (e.g. via <em>Erzeugen -> VRML97 Amendment 1 -> 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ö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.<br> <br><br><img src=nurbscurverotationy.jpg><br><br> Die Kurvenpunkte bilden die Seitenansicht des Drehkörpers. <br><br><img src=nurbscurverotation2.jpg><br><br> Mit <em>Umwandeln -> In NurbsSurface umwandeln</em> geht es weiter. <br><br><img src=nurbsrotationdialog.jpg><br><br> Um X symetrische Modellierung möglich zu machen, sollte die Schaltfläche "Kurve vor der Drehung plaetten" gedrü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="elevatedegree">Grad Erhöhung</a> <small>(new in Version 0.27beta)</small></h4> <p> Bei Modellieren mit NURBS Knoten kommt oft der Wunsch auf, neue Kontrollpunkte in einer Richtung einzufügen. <br><br><img src=elevate_before.jpg><br><br> Mit dem Menüpunkt <em>Aktion -> Elevate (U/V) Degree up </em> ist das möglich, ohne die ässere Form zu verändern. <br><br><img src=elevate_after.jpg><br><br> Mit den neuen Kontrollpunkten lassen sich neue Ausbuchtungen verwirklichen. <br><br><img src=elevate_target.jpg><br><br> </p> <li> <h4><a name="nurbsindexedfaceset">IndexedFaceSet Knoten erzeugen</a> <small>(new in Version 0.25beta)</small></h4> <p> NURBS Flächen werden oft als abgerundete Flächen angesehen. 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.<br> <br><br><img src=spherefaceset1.jpg><br><br> Wenn zum Beispiel ein Sphere Knoten mit <em>Umwandeln -> In NurbsSurface umwandeln</em> konvertiert wird <br><br><img src=spherefaceset2.jpg><br><br> und kleine u/vTesselation Werte gesetzt werden, entstehen nur sehr wenige Flächen. <br><br><img src=spherefaceset3.jpg><br><br> Mit <em>Umwandeln -> In IndexedFaceSet umwandeln</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ä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ätzlichen Körper mit dem Setzen von u/vTesselation in NurbsSurface Knoten aus konvertierten Primitiven erzeugt werden können. <table> <tr><td>Kö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>>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ästchen, die mit der Maus verschoben werden können). Wenn eine NurbsSurface Fläche Plain (<em>Erzeugen -> VRML97 Amendment 1 -> 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äre. <br><br><img src=degree1faceset2.jpg><br><br> Mit dem Menüpunkt <em>Umwandeln -> In IndexedFaceSet umwandeln</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ächen verschwimmen lassen, muss der Normal Knoten vom IndexedFaceSet Knoten entfernt werden. <br><br><img src=degree1faceset4.jpg><br><br> Unglücklicherweise ist die Konversion von einem IndexedFaceSet Knoten zurück in einen NurbsSurface Knoten not nicht implementiert... </p> </li> </ul> <p> <h3><a name="super">Superformula Modellierung</a> <small>(neu in Version 0.27beta)</small></h3> <ul> <li> <h4><a name="superformula">Superformula Grundlagen</a></h4> White_dune unterstützt 3D-modelling, die auf der sogenannten "superformula" ("Superformel") basiert. <br> <pre> pow(pow(fabs(cos(m * angle / 4.0) / a), n2) + pow(fabs(cos(m * angle / 4.0) / b), n3), -1.0 / n1) </pre> <br> Diese Formel wurde vor einigen Jahren von einem Biologen gefunden und kann benutzt werden, um n-symetrische Formen zu erzeugen, die Dingen aus der Natur wie Blumen, Blaettern, Insektenkörpern, Muscheln oder Seesternen ähnlich sehen. <br><br><img src=supershapes.jpg><br><br> Diese <a href="supershapes.wrl" target="_blank">Formen</a> wurden alle mit dem SuperShape PROTO erzeugt. <br><br> Superformula basierte Formen sind nicht von sich aus Teil von VRML97, sondern sind über ein PROTO (selbst definierter VRML Knoten) mit Scriptcode ("scripted PROTO") implementiert.<br> Superformula basierte Körper können entweder in einen Extrusion Knoten oder in einen IndexedFaceSet Knoten umgewandelt werden. IndexedFaceSet basierte superformula Körper können auch einem NurbsSurface Knoten angenähert werden, um so einen Startpunkt für weiteres NURBS-modelling zu haben. <ul> <li> <h4><a name="superextrusion">SuperExtrusion</a></h4> Das SuperExtrusion PROTO benutzt die Superformel um ein 2D Polygon in der X-Z-Fläche zu berechnen und formt daraus einen Körper indem dieses Polygon in der Y-Richtung entlang einer Kurve wiederholt wird. Diese Kurve funktioniert entsprechend einer NurbsCurve und kann verändert werden, indem man die Kontrollpunkte bewegt.<br> Dieser Körper kann in eine Extrusion umgewandelt werden und einige seiner Parameter funktionieren wie bei einer Extrusion. Anders als bei einer Extrusion werden die scale Parameter nicht pro spine Punkt angewandt sondern über den ganzen spine verschmiert. <br><br><img src=superextrusion.png><br><br> </li> <li> <h4><a name="supershape">SuperShape</a></h4> Das SuperShape PROTO benutzt die Superformel um ein 2D Polygon in der X-Z-Fläche zu berechnen und formt einen Körper indem die Superformel auch in der Y-Z-Fläche ähnlich wie bei Kugelkoordinaten berechnet wird.<br> <br><br><img src=supershape.png><br><br> Dieser Körper kann in ein IndexedFaceSet umgewandelt werden </li> <li> <h4><a name="superellipsoid">SuperEllipsoid</a></h4> White_dune hat auch ein PROTO für ein Superellipsoid, ein spezieller Fall des SuperShape. Es kann benutzt werden, um eine Kugel, <br><br><img src=superellipsoid_sphere.jpg><br><br> eine Box, ein Zylinder, <br><br><img src=superellipsoid_cylinder.jpg><br><br> ein Oktaeder und abgerundete Formen dieser Kürper <br><br><img src=superellipsoid_box_smooth.jpg><br><br> <br><br><img src=superellipsoid_cylinder_smooth.jpg><br><br> mit nur 2 Parametern zu erzeugen.<br> Wie das SuperShape PROTO hat das SuperEllpsoid PROTO ein Feld "border", um z.B. auch Halbkugeln modellieren zu können. <br><br><img src=superellipsoid_sphere_half.jpg><br><br> Dieser Körper kann in ein IndexedFaceSet umgewandelt werden </li> </ul> </p> <h3><a name="coordinate">Ändern von Coordinate basierten Knoten</a><small> (neu in Version 0.29beta)</small></h3> <p> Seit Version 0.29beta können auch Coordinate basierte Knoten (wie IndexedFaceSet ("Mesh"), IndexedLineSet oder PointSet) genauso im 3D Preview Fenster interaktiv verändert werden wie die Kontrollpunkte eines NURBS Körpers.<br> Bei Knoten mit sehr vielen Punkten, ist das nur sinnvoll um kleinere Details zu verändern. </p> <h3><a name="flip">Umklappen/austauschen und Setze Drehpunkt Aktionen</a><small></h3> <p> Es gibt einige nützliche modelling Aktionen im <em>Aktion</em> Menü: <ul> <li> <em>Umklappen (x/y/z)</em><br> Das Umklappen Kommando kann für ganze Szenengraph Zweige benutzt werden. Es ändert alle Transform und Shape (Unter-)Knoten von x zu -x, y zu -y oder z zu -z. Das ist nützlich um eine Zweig von Objekten nach einer Verdopplung zu spiegeln. Bei schwierigen Objekten wie Cone oder IndexedFaceSet wird versucht, das Ergebnis konsistent zu halten. Ein Cone (Kegel) kann nicht in der y-Richtung umgeklappt werden, deswegen wird er in diesem Fall vorher in einen NurbsSurface Knoten umgewandelt. Für einen Oberflächenknoten wie IndexedFaceSet, das Umklappen Kommando beachtet die normal und ccw Fields. Ein Coordinate Knoten in einem IndexedFaceSet unterstützt auch das <em>Umklappen</em> Kommando, aber dann muss man selber auf das normal und ccw Field aufpassen. </li> <li> <em>Austauschen (xy/yz/xz)</em><br> Das Austauschen Kommando kann auch für ganze Scenengraph Zweige benutzt werden. Zum Beispiel vertauscht das xy Kommando die x und y Wert von allen passenden Knoten. </li> <li> <em>Abflachen (x/y/z)</em><br> Dieses Kommando funktioniert nur für NURBS und Coordinate Knoten. Es setzt alle Punkte in der x, y oder z Richtung auf den Durchschnittswert aller Punkte in dieser Richtung. </li> <li> <em>Abflachen nach Null (x/y/z)</em><br> Dieses Kommando funktioniert nur für NURBS und Coordinate Knoten. Es setzt alle Punkte in der x, y oder z Richtung auf Null. </li> <li> <em>Setze Drehpunkt zu (Mitte min/max x/y/z)</em><br> Dieses Kommando erfordert die Kombination<br> Transform -> Shape -> Geometrieknoten<br> wobei der Geometrieknoten (e.g. Box, Sphere, IndexedFaceSet etc.) angewählt sein muss. Das Kommando setzt den Mittelpunkt (Drehpunkt) des Transform Knotens auf den Mittelpunkt oder die Grenzen des umschliessenden Quaders. Das ist nützlich, wenn man mit Modellierungwerkzeugen arbeitet, die VRML Objekte mit einem Drehpunkt exportieren, der weit weg vom Objekt liegt. </li> </ul> </p> <h3><a name="array">Array Werkzeug</a><small>(new in Version 0.27beta)</small></h3> <p> White_dune erlaubt es Objekte zu vervielfälltigen. Im Unterschied zu ähnlichen Funktionen in einigen 3D-Modellers (wie dem "Art of Illusion" Programm) werden dabei nicht N Kopien des gleichen Objekts erzeugt. Es werden N VRML Transform Knoten (für Verschiebung (translation), Drehung (rotation), Vergrössern/Verkleinern (scale) und Mittelpunkt (scale) abhängig vom Arraydialog) mit einem VRML USE Konstrukt erzeugt. Ein USE Konstrukt ist ein kompakter Weg um Dinge in VRML zu wiederholen. Es ist eine Art "Zeiger ohne Unterschied", ähnlich wie ein Hardlink zu einer UNIX Datei (wenn Sie nur M$Windows kennen: eine cleverer Abart eines Shortcut zu einer Datei). Ein ge-USE-ter Knoten ändert sich ebenfalls, wenn sich das Orginal verändert. <br> Um das Array Werkzeug zu benutzen, muss das Objekt ausgewählt werden, das vervielfälltigt werden soll. <br><br><img src=array_start.png><br><br> Danach wird der Menüpunkt <em>Aktion -> Vervielfaeltigen</em> benutzt. Im folgenden Array Dialog <br><br><img src=array_dialog.png><br><br> kann die Zahl der Objekte (Numbers Objects) und die Parameter für die Transform Knoten eingetragen werden. <br><br><img src=array_result.png><br><br> Wenn das Orginal geändert wird, ändern sich alle ge-USE-ten Knoten ebenfalls. <br><br><img src=array_changed.png><br><br> </p> <h4><a name="upload"><em>Datei -> Upload</em></a> </h4> <small>(new in Version 0.27beta)</small> <p> White_dune hat einen Befehl (Menüpunkt <em>Datei -> Upload</em>) um eine VRML Datei auf einen Internet Server heraufzuladen.<br> Beim heraufladen einer Datei ins Internet wird man üblicherweise nach einem Passwort gefragt. White_dune kann das Passwort so speichern, dass es von den Auslagerungsdaten (swapspace) durch mlock/vlock Aufrufe geschützt ist.<br> Auslagerungsdaten ist der Inhalt von Computerspeicher der auf Platte ausgelagert wird um Platz für andere laufende Programme zu machen. Ein Eindringling kann die Auslagerungsdaten nach Passworten durchsuchen.<br> Die Übertragung eines Passworts von einer Anwendung (white_dune) zu einer anderen Anwendung (dem Herauflade-Kommando) auf einem sicheren Weg ist keine leichte Aufgabe, wenn man an Probleme wie die Auslagerungsdaten denkt.<br> Im upload settings dialog (<em>Options -> Upload settings...</em>) <br><br><img src=upload.png><br><br> kann das upload Kommando zwei Parameter haben. Jeder parameter der upload Kommandozeil wird mit Hilfe der Buchstaben "%s" gesetzt. <ul> <li> Im Fall von nur einem "%s" wird dieser Parameter ersetzt mit dem Pfad der VRML Datei, die aus den aktuellen Daten in white_dune erzeugt wurde.<br> Wenn kein Passwort benutzt wird, kann des Herauflade-Kommando entweder jedes Mal nach dem Passwort fragen oder es wird ein fortgeschrittener Authentifizierungsalgorithmus wie z.B. ssh passphrase benutzt. </li> <li> Im Fall von nur einem "%s" und wenn es ein Passwort gibt, wird diese Passwort über standardin an das Herauflade-Kommando geschickt. Normalerweise ist der Inhalt von standartin/standardout nicht vom den Auslagerungsdaten geschützt, so dass es ein mögliches Sicherheitsrisiko gibt. </li> <li> Im Fall von zwei "%s" wird das Password as Kommandozeilen Option benutzt. Auf den meisten Operationsystemen, bedeutet das ein hohes Sicherheitsrisiko, denn die Kommandozeilen kann von jedem anderen Benutzer auf dem gleichen System gelesen werden. </li> </ul> Die letzte Zeile im upload settings Dialog enthält die Möglichkeit, eine html-webpage nach dem Heraufladen aufzurufen. Um das zu nutzen, müssen die entsprechenden HTML tags eingetippt werden, die dann in ein HTML file eingetragen werden.<br> Zum Beispiel ist im folgenden Dialog eingetragen, dass die Daten aus white_dune in eine VRML Datei mit einem vorbestimmten Namen kopiert wird und dann diese VRML Datei zusammen mit der Zeichenkette "hello" im Webbrowser beim nächsten <em>Datei -> Upload</em> Kommando dargestellt wird. <br><br><img src=upload_copy.png><br><br> Die Zeile mit den HTML tags kann "%s" einhalten, was dann durch das Passwort ersetzt wird. Dadurch wird ein HTML file mit einem Passwort erzeugt. Das ist ein sehr hohes Sicherheitsrisiko, benutzen diese Möglichkeit nicht, wenn Sie nicht genau wissen, was Sie tun ! </p> <small>*** 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. </small> </body>