White_dune ist ein graphischer VRML97 Editor, ein simpler (NURBS) 3D Modeller
und ein Animationwerkzeug in Entwicklung.
Es kann ein VRML97 file lesen, stellt dessen Szenengraph dar und
erlaubt es dem Benutzer, den Szenengraph, die Fieldwerte und Routes zu
verändern.
White_dune kann benutzt werden, um 3D-Modelle,
Animationen und Interaktionen in VRML97 zu verbessern oder zu erstellen.
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.
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.
White_dune ist noch in der Entwicklungsphase und es läuft noch nicht so
stabil, wie es sollte.
Wenn white_dune abgestürzt ist, ist die bisherige Arbeit verloren ?
Nein, nicht zwingend.
"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
Internal Crash !
Try to save Files
attempt to write file to /home/someone/.dune_crash_NUMBER_NUMBER.wrl
write sucessfull
auf die Standartfehlerausgabe des white_dune starteten Fensters und auf
die Systemkonsole (z.B. das Fenster der "xconsole" Anwendung).
Unter M$Windows erscheint (ggf. nach Drücken von "ignorieren/ignore")
eine entsprechende Messagebox

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

Klicken Sie darauf und speichern Sie in eine andere Datei.
Wenn der Fehler, der zum Absturz geführt hat, die interne Datenstruktur
im Programm beschädigt hat, kann diese Methode versagen.
In diesem Fall lohnt es sich nach temporären Daten (".dune_*") im
Verzeichnis der VRML-Datei zu suchen, die bei der Ausführung von
File->Preview oder File->Textedit entstanden sind.
Diese Dateien werden bei einem normalen Programmende gelöscht, nicht
aber bei einem Programmabsturz.
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.
White_dune ist ein Lowlevel Werkzeug zum Bearbeiten von VRML97 Files.
Dabei wird angenommen, dass dem Benutzer die grundlegende
Struktur von VRML97 bekannt ist.
Ausführliche technische Informationen zu VRML97 findet
man in der
offiziellen ISO Spezifikation unter
http://www.web3d.org/x3d/specifications/vrml/ISO-IEC-14772-IS-VRML97WithAmendment1.
Für die Benutzung von White_dune ist vor allem die Node Referenz
http://www.web3d.org/x3d/specifications/vrml/ISO-IEC-14772-IS-VRML97WithAmendment1/part1/nodesRef.html
wichtig.
Eine kurze Einführung in die VRML97 Struktur in deutscher Sprache
finden Sie im Internet unter
http://www.csv.ica.uni-stuttgart.de/vrml/linuxtag/scenengraph.html.
Ein gutes, einfaches Tutorial über VRML97 für Einsteiger
in englischer Sprache findet sich (ausser in einer Anzahl entsprechender
Bücher) unter
http://web3d.vapourtech.com/tutorials/vrml97/.
-
White_dune ist (noch) kein vollständiger VRML97 Browser und
kann nicht alles darstellen
Man kann mit white_dune Interaktion und Scriptprogrammierung erstellen,
aber zum Testen braucht man immer noch File -> Preview
(oder muss das File abspeichern und dann mit einen VRML Browser aufrufen).
-
Was white_dune zur Zeit (noch) fehlt ist die Unterstützung
für
selbst definierte neue VRML Knoten (PROTO bzw. EXTERNPROTO)
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 dargestellt. Es gibt auch (noch) keine Möglichkeit
(ausser File -> textedit ), die PROTO Definition zu verändern
-
White_dune ist (noch) kein allgemein einsetzbares Modelling Tool.
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).
Der beim 3D-Modelling am häufigsten eingesetzte Körper ist
die "mesh". Die meisten 3D-Modelling-Programme exportieren zur Zeit bei
VRML97 ausschliesslich "mesh"-Daten als IndexedFaceSet.
-
Ein beim 3D-Modelling ebenfalls häufig eingesetzter Körper ist
der "NURBS" Körper, der von white_dune unterstützt wird.
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.
Er wird zur Zeit von den VRML97 Browsern cortona und
bitmanagement/blaxxun cc3d/contact unterstützt, aber nicht in
schlecht gewarteten VRML browsern wie cosmoplayer 2.1.
Für cosmoplayer existiert eine (langsame
und nicht vollständige) Implementierung über ein VRML PROTO.
Weitere Informationen dazu finden Sie
hier.
-
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.
Dabei muss beachtet werden, dass diese Konvertierungen (vorerst)
Einbahn-Strassen darstellen, eine Rückkonversion ist nicht innerhalb
des white_dune Programms durchführbar.

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.
-
Scene Tree
Dieses Fenster enthält den Szenengraphen, und zeigt damit
die Struktur einer VRML Datei, die Information, wie
einzelne VRML Nodes (Knoten) angeordnet sind.
-
Field View
Dieses Fenster enthält die Fieldwerte, die Zahlen
(bzw. Zeichenketten usw.) in einer VRML Datei. Angezeigt
werden jeweils die Fields des zuletzt ausgewählten
Knoten.
-
Route View
Dieses Fenster enthält die ROUTE's, die
Informationswege mit denen sich verschiedene
VRML Knoten beim Programmlauf verschiedene Nachrichten
schicken können.
-
Channel View
Dieses Fenster beschäftigt sich ausschliesslich
mit Interpolatorknoten. Interpolatorknoten sind in VRML97
vor allem wichtig für Animationen.
-
3D Preview
Dieses Fenster lässt sich nicht abschalten und
zeigt eine Vorschau auf die graphische Darstellung
des VRML Files. Im Gegensatz zu den anderen Fenstern
ist im entsprechenden Programmteil die Umsetzung
des VRML97 Standards noch sehr lückenhaft.
Einige Knotentypen wie "MovieTexture", "PixelTexture", "FontStyle" und
selbst definierte "PROTO", "EXTERNPROTO"
werden überhaupt nicht dargestellt.
Die Icons von Knoten, die überhaupt nicht dargestellt werden sind
entweder leer (PROTOs) oder haben einen schwarzen Rahmen.
Es sind auch nicht alle Fieldwerte richtig dargestellt, zum Beispiel
bei Knotentypen wie "Text" unter Unix ist
die Umsetzung als "erst mal besser als gar nichts"
zu verstehen.
Am auffälligsten ist der Fehler bei den "colorPerVertex",
"normalPerVertex" und "convex" Fieldwerten beim häufig
auftretenden "IndexedFaceSet" (aus Einzelflächen
zusammengesetzter Körper):

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

Korrektere Darstellung eines IndexedFaceSet
bei "colorPerVertexflag true" in Cosmoworlds/Cosmoplayer (links)
und White_dune (rechts)
Ein vergleichbares Problem tritt bei "normalPerVertex" auf.
"normalPerVertex" beeinflusst die Beleuchtungsberechnung
(Schattierung) von Objekten.
Auch das Field "convex" wird (noch) ignoriert. Wird "convex" auf "false"
gesetzt, werden Einbuchtungen in Flächen bei der Darstellung beachtet.

Korrekte und fehlerhafte Darstellung eines IndexedFaceSet mit eingebuchteten
Flächen bei "convex false" in FreeWRL (links)
und White_dune (rechts)
Das Problem mit "convex false" existiert auch bei Extrusion-basierten
Knoten. Bei Extrusion-basierten Knoten existieren noch weitere
Darstellungsfehler.
Die Darstellung von durchsichtigen Körpern ist ebenfalls
fehlerhaft.
Natürlich bedeutet eine solche falsche Darstellung im 3D Preview
eines
eingelesenen VRML Objekts nicht, dass sich ein Fehler in der eingelesenen
VRML Datei befindet.
Mit File->Preview kann man im Zweifelsfall zum Vergleich
einen VRML Browser starten.
Um im 3D Preview Fenster navigieren zu können steht zur Verfügung:
-
Shift-Mouse 1: Zoom View
-
ctrl-Mouse 1: Rotate View
-
Shift-ctrl-Mouse 1: Move View
zusätzlich steht ab der Version 0.16 eine SGI artige Navigation
zur Verfügung. Bitte beachten Sie, dass ein fehlkonfigurierter
Windowmanager diese Eingaben für seine eigenen Zwecke interpretieren
könnte...
-
Alt-Mouse1: Rotate View
-
Alt-Mouse2: Move View
-
Alt-Mouse1-Mouse2: Zoom View
Ist ein 6D Eingabegerät aktiv, kann bei angewähltem
Scene-Icon
im Scene Tree Fenster
je nach der Auswahl der Transformicons
durch das VRML File navigiert werden.
Einen neuen
VRML node mit eine Mausklick auf das entsprechenden Icon
hinzufügen ist der einfachste Weg, den Szenengraph zu ändern.
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.
White_dune versucht, entweder den neuen node am blau untermalten Selektionspunkt des
Szenengraph

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

Die folgende Tabelle zeigt die Anforderung für die entsprechenden
Knoten im VRML97 Standard:
- Appearance braucht Shape
- Material braucht Appearance
- ImageTexture braucht Appearance
- MovieTexture braucht Appearance
- PixelTexture braucht Appearance
- TextureTransform braucht Appearance
- Coordinate braucht IndexedFaceSet oder IndexedLineSet oder PointSet
- Color braucht IndexedFaceSet oder IndexedLineSet oder PointSet
- Normal braucht IndexedFaceSet
- TextureCoordinate braucht IndexedFaceSet
- FontStyle braucht Text
- AudioClip braucht Sound
So muss zum Beispiel ein Appearence Knoten selektiert sein, damit ein
ImageTexture Knoten eingefügt werden kann, oder ein Shape Knoten
selektiert sein, damit ein Appearence Knoten eingefügt werden kann.
Alle die entsprechenden Felder im VRML97 Standard sind vom Datentyp
SFNode, deshalb kann nur ein Knoten eingefügt werden.
Deshalb wird ein Icon auch dann ausgegräut, wenn schon ein
entsprechender Knoten vorhanden ist.
Zum Beispiel können keine zwei ImageTexture Knoten zu einem
Appearence Knoten hinzugefüt werden.
Deswegen ist das ImageTexture Icon ebenfalls ausgegraut,
wenn ein Appearence Knote selektiert wird, aber ein ImageTexture Knoten
schon vorhanden ist.
Nach dem VRML97 Standard brauchen auch die 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 Create -> Shape -> Menüpunkte
eine vollständige Shape-Struktur (einschliesslich eines umschliessenden
Transform Knoten) aufgebaut.
Ein anderer Weg, den Szenengraph zu verändern, ist Teile davon mit
der Maus herumzuschieben.
White_dune zeigt das Icon eines Stopschildes,
wenn der Zielknoten dies nicht erlaubt.

Wenn der Zielknoten es erlaubt, benutzt white_dune den normalen Mauszeiger.

Ein Ziel ist nicht eindeutig, wenn der Ziel node mehrere SF/MFNode fields hat.

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
Options -> Preferences Dialog anders sind), damit die Field Namen
als Ziel benutzt werden können.
Genauso wie beim lokalen kopieren/verschieben im Explorerprogramm von
M$Windows2000 und ähnlichen Filemanagern kann man das Verhalten
beeinflussen, wenn man die Tastatur benutzt, nachdem man angefangen hat,
den VRML Knoten herumzuschieben:
-
Verschieben:
keine Taste drücken oder Shift Taste drücken
(das Icon bleibt unverändert)

-
Kopieren:

Crtl Taste drücken
(das Icon zeigt zusätzlich ein "+" Zeichen)

-
DEF/USE:

Crtl Taste und Shift Taste gleichzeitig drücken
(das Icon zeigt zusätzlich ein "Pfeil" Zeichen)

(new in Version 0.27beta)
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.

Die verfügbaren Kommandos sind:
-
Actions -> Move rest of scenegraph branch to
Dieses Kommando verschiebt die Knoten in einen "grouping node"
(gruppierender Knoten) (wie Group, Transfrom usw.)
-
Actions -> Move rest of scenegraph branch 1 level up
Dieses Kommando verschiebt die Knoten in den gleichen Szenegraph
Zweig wie der "parent node" (Eltern Knoten) des angewälten Knotens.
Leider sind diese Operationen (noch) sehr langsam.
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.

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


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

Es gibt Befehle, um zum angewälten Knoten zu springen (mit
View -> Unzoom/jump to selection )

oder die Ansicht des Routeview zu vergrössern
(mit View -> Zoom out)

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.

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

-
"MF"-Fieldwerte ändern(new in version 0.27beta)
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.
Um ein "MF"-Field anzuschauen/zu verändern, muss man auf das
"+"-Zeichen auf der linken Seite klicken.
Wie in einer VRML Datei wird ein "MF"-field mit nur einem Dateneintrag
ähnlich behandelt wie ein normales "SF"-Field mit nur einem Datum.
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.
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.
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 Edit -> delete
benutzen.
-
Fieldwerte verändern im 3D Preview Fenster
Veränderungen im 3D Preview Fenster bedeuten auch eine
Veränderung der
Fieldwerte. Hauptsächlich wird dabei ein Transformknoten
verändert.
Mit den Werkzeugen
legen Sie beim interaktiven
Arbeiten fest, ob das Arbeit mit der Maus auf einem Transformknoten
eine
- Verschiebung
- Drehung
- Skalierung
- Mittelpunktsverschiebung
(neu in Version 0.19beta)
aktiviert wird.
Beachten Sie, dass Sie diese Werkzeuge nicht benutzen
können, wenn kein Transformknoten
im entsprechenden Zweig
des Szenengraphs vorhanden ist.
Ausser dem Transformknoten können auch andere Fieldwerte im 3D
Preview Fenster
verändert werden. Dabei lassen sich kleine weisse Kästchen
verschieben, wie z.B. bei Box, Cone, Cylinder, Sphere, ElevationGrid,
Extrusion, PointLight
oder den VRML97 Amendment 1 NurbSurface/NurbsCurve Knoten.
-
6D Input (neu in Version 0.19beta)
Seit Version 0.19beta unterstützt White_dune 6D Eingabegeräte
(6D bezieht sich auf die 6 Freiheitsgrade) unter Unix/Linux.
Ist ein 6D Eingabegerät konfiguriert und das Icon
gedrückt, kann ein Transform-Knoten
(und die darin enthaltenen Objekte) in allen 6 Freiheitsgraden bewegt
werden. Das Icon
beschränkt sich auf
Verschiebung, das Icon
auf Drehung.
Das klassische
6D Eingabegerät
ist der Spaceball, eine Art Joystick, der nur kleine Auslenkungen erlaubt,
diese aber in alle Raumrichtungen, einschliesslich Drehungen.

Drückt man zum Beispiel auf den Spaceball, bewegt sich das Objekt
nach unten. Verdreht man den Spaceball, folgt das Objekt dieser
Bewegung.
Die Konfiguration der 6D Eingabegeräte funktioniert (noch)
ausschliesslich über Kommandozeilenparameter. Dabei
muss neben der Art des Eingabegeräts auch die Skalierung
(Multiplikation) der Eingabewerte angegeben werden, zum Beispiel:
white_dune -xinput spaceball -allxyz=20,200 -allrot=40,400
Es ist auch möglich, den Einfluss der Eingabegeräte zu
vergrössern/verkleinern während das Programm läuft.
Benutzen Sie Mode -> Increase input device
(icon
) oder Mode -> Decrease input device
(icon
).
Wenn die Bewegung auf Verschiegungen (
)
begrenzt wird, wird nur der "allxyz" Bereich verändert.
Wenn die Bewegung auf Drehungen (
)
begrenzt wird, wird nur der "allrot" Bereich verändert.
Ausser der Unterstützung über das Xinput Protokoll werden
Spaceballgeräte
auch über Linux Joystick und libsball unterstützt. Details zu
den Kommandozeilenparametern sind in der
man page zu finden.
Ein anderes 6D Eingabegerät sind sogenannte Dials (verfügbar
z.B. unter SGI IRIX).
In der Defaulteinstellung sind die Eingabeachsen etwas ungünstig
angeordnet

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

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

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

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


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

Deshalb kann die Anzahl der Achsen beschränkt werden. Um z.B.
den Micro$oft Sidewinder Pro als 3-achsigen Joystick zu behandeln,
kann man die -axes -Option in der Kommandozeile benutzen.
white_dune -joystick /dev/input/js0 -axes=3
Gamepads sind häufig mit wenig sinnvollen Achsen überfrachtet.
Das Logitech Wingman Cordless Gamepad meldet zum Beispiel beim Test mit dem
jstest Programm 9 Achsen. Um die 6 sinnvollen Achsen
(2 Daumensticks und das Eingabekreuz) sinnvoll einzusetzen, muss die
Achsenzuordnung in der Kommandozeile verändert werden.
white_dune -joystick /dev/input/js0 -y=4 -z=-1 -xrot=6 -yrot=3 -zrot=5
Dabei bedeutet die Angabe "-z=-1" dass die z-Achse auf die Achse Nummer
1 (also die 2. Achse, da die Zählung bei 0 beginnt) gelegt wird,
die Eingaberichtung aber umgedreht wird.
-
M$Windows joystick Input:
Die Unterstützung für einen M$Windows joystick ist sehr
ähnlich zum Linux joystick.
Bei den speziellen Eigenschaften der
mit M$Windows gelieferten joystick Treiber sollte man sich nicht
darüber wundern, wenn z.B. der 2. Daumenstick eines Gamepads
überhaupt keine Werte liefern kann, oder Joystickachsen gemeldet
werden, aber nur Fehler zurückliefern.
Ausserdem hat die Weisheit der Authoren der M$Windows joystick
Programmierschnittstelle dazu geführt, dass ein Fehler
als Vollausschlag interpretiert werden muss (ein ähnliches Problem
führte übrigens zur Explosion der ersten Ariane 5 Rakete...).
Deshalb sollte man unter M$Windows beim Testen mit 2 Achsen beginnen.
Für den ersten M$Windows joystick (Nummer 0) kann die Kommandozeile
dann zum Beispiel so lauten:
white_dune.exe -joystick 0 -axes=2 -none=2 -allxyz=20,,,0.000001 -allrot=0.2,,,0.0000001
-
Fieldwerte verändern im ChannelView Window
Das ChannelView Window wird zur Anzeige oder Veränderung von
Interpolator-Knoten
benutzt. Bei einem Interpolator-Knoten sind Eingabewerten zwischen 0 und 1
eine Reihe von Ausgabewerten zugeordnet.
Interpolatoren werden in VRML bei einfachen Animationen in der Form
ROUTE TimeSensorDEFNAME.fraction_changed TO ???InterpolatorDEFNAME.set_fraction
ROUTE ???InterpolatorDEFNAME.value_changed TO ???DEFNAME.set_???
verwendet. Der Ausgang "fraction_changed" eines TimeSensor-Knoten
(der Werte zwischen 0 und 1 liefert) wird dabei in den "set_fraction"
Eingang eines Interpolator-Knoten geleitet. Der Interpolator-Knoten
wählt einen passenden Zwischenwert der Ausgabewerten, der
in andere VRML-Knoten geleitet werden kann, so dass
eine Animation ruckfrei abläft.
Im folgenden Beispiel:

wird die Ausgabe eines PositionInterpolators mit den Eingabewerten
0, 0.3, 1 und den Ausgabewerten x=1 y=0 z=3, x=1 y=2 z=3, x=3 y=3 z=0
auf den set_translation Eingang eines Transform-Knotens (also eine
Verschiebung) geleitet. Das bedeutet 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.
-
Einfach benutzbar sind alle SF-Interpolatoren:
-
ColorInterpolator:
Interpoliert zwischen Farben.
Farben finden sich z.B. bei Shape->Appearance->Material
-
PositionInterpolator:
Interpoliert zwischen Positionen.
Ziel kann z.B. Transform.set_translation sein.
-
OrientationInterpolator:
Interpoliert zwischen Drehungen.
Ziel kann z.B. Transform.set_rotation sein.
-
ScalarInterpolator:
Interpoliert zwischen einzelnen Zahlen.
Einzelne Zahlen kommen oft in Knoten als EventIn vor.
Daher gibt es viele Verwendungsmöglichkeiten.
-
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

um es zu erlauben, dass zusätzliche Werte mit der Maus eingetragen
werden können

(zum Beispiel um den ersten Zeitschritt als letzten Zeitschritt zu
wiederholen)
.

Es gibt eine obere Grenze der Zahl der dargestellten Werte.
Unter "Limit keys in Channelview"
im Options -> Preferences dialog lässt sie sich ändern.
Setzen Sie diese Grenze entsprechend der Geschwindigkeit Ihres Systems.
-
CoordinateInterpolator:
Interpoliert typischerweise zwischen den Positionen von Punkten eines
IndexFaceSet.
Das heisst das pro Punkt eines zusammengesetzten
Körpers und Zeitschritt ein 3D Vektor Wert eingetragen werden muss.
Animationen mit der Hilfe des CoordinateInterpolator nennt man
normalerweise "Morphing".
-
NormalInterpolator:
Interpoliert zwischen den Oberflächennormalen eines
aus Einzelflaechen zusammengesetzten Körpers.
Das heisst das pro Punkt (oder Polygon) eines zusammengesetzten
Körpers und Zeitschritt ein 3D Vektor Wert eingetragen werden muss.
Bestimmte einfache Interpolator-Animationen könnnen in
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.
Damit mit den Werkzeugen
wie mit einem Kassettenrecorder Animationen aufgenommen und abgespielt
werden können sind folgende Vorraussetzungen nötig:
Seit Version 0.27beta existiert in white_dune der Menüpunkt
Actions -> Animate, der genau diese Struktur für den
angewälten Knoten erzeugt, wenn EventIn/ExposedField-Felder hat,
für
die ein Interpolator existiert. Im entsprechenden Dialog wird nachgefragt,

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.
Wird beim Erstellen einer Animation nur das Aufnahmeicon gedrückt
,
muss der Zeitcursor jeweils verändert
werden und danach der entsprechende Wert (über Tastatur, Maus oder
u. U. 6D Eingabegerät) verändert werden.
Wird das Aufnahmeicon zusammen mit dem Abspielicon gedrückt
, wird dauernd die Veränderung der Werte
(durch Mauseingabe oder u. U. 6D Eingabegerät)
aufgenommen.
Die Mauseingabe bei der Aufname erfordert eine ruhige Hand.
Es ist nicht ungewöhnlich, dass man nach der Aufnahme einige
aufgenommene Werte loeschen will.
Dazu kann man einen Zeitbereich im Channelview Fenster durch Klicken und
gleichzeitigem Verschieben der Maus anwähen und den Menüepunkt
edit -> delete bzw. das Delete Icon benutzen.
Dadurch werden die entsprechenden Werte gelöscht.
-
Farbkreis (neu in Version 0.19beta)
Für Farbwerte gibt es einen spezielles Eingabefenster, das an die
Stelle des FieldView Fensters tritt, wenn darin ein Farbwert
ausgewählt ist und das Colorcircle Icon gedrückt ist.

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

Der Aufbau des Farbkreises ist zur Zeit noch ziemlich langsam, wenn unter
Unix/Linux kein True/Directcolor Display zur Verfügung steht...
Über den "OK" Button kehrt man zum normalen FieldView Fenster
zurück.
-
Script Editor (neu in Version 0.22beta)
Es gibt zwei Möglichkeiten, den Scripteditor zu starten:

-
Um einen neuen Scriptknoten zu erzeugen:
Über das "Script" icon (Menüpunkt Create -> Programming -> Script),
-
Um einen selektierten Scriptknoten zu verändern:
Über das "Object Edit" icon
(Menüpunkt Action -> Object edit),
Der geöffnete Scripteditor Dialog

erlaubt es, neue Felder/Events zum Scriptknoten hinzuzufügen (add),
sie zu verändern (change) oder zu löschen (delete).
Drücken Sie "OK" um die Arbeit am Scriptknoten zu beenden.
-
URL Editor (neu in Version 0.22beta)
Das "url"-Feld (das den ECMAscript (javascript) Code eines Scriptknotens
enthalten kann) kann in einem Texteditor verändert werden (edit).
Über den Menüpunkt options -> Texteditor Settings
kann der Texteditor ausgewählt werden.
Ist das "url"-Feld leer, wird ein Schema eines ECMAscripts erzeugt.
When the "url"-field is empty, a scheme of a ECMAscripts will be created.
To start the textedit, select a Script Node and use the "URL Edit" icon
(menupoint Action -> Url edit).

Bevor man den Scripteditor Dialog benutzen kann, muss man planen,
welche Datentypen und eventIn/eventOut Informationen die Knoten
haben, die man anschliessen will. Dazu muss man
die Knotenbeschreibung des
VRML standards (zum Beispiel über den Menüpunkt
Help -> Name des gerade selektierten Knoten lesen
(oder ein entsprechendes Buch benutzen).
Zum schnellen Ausprobieren kann es dagegen angenehmer sein, das
vereinfachte Skriptbau-Verfahren zu benutzen.
Erzeugen Sie einen "leeren" Scriptknoten mit dem "Script" icon
(oder benutzen Sie den Menüpunkt Create -> Programming -> Script).
Gemäss der
"Weg da!" Philosophie des ursprünglichen dune Projekts
drücken Sie einfach nur "OK" im Scripteditor Dialog (siehe oben).
Jetzt wird das RouteView Fenster für die weitere Arbeit benutzt.

Scriptknoten haben ein spezielles "connect anything" ("verbinde alles")
eventOut.
Wenn man draufklickt, die Maustaste festhält und die Maus verschiebt
("drag") wird eine weisse Route gezeichent

Wenn man die Maustaste gedrückt hält, kann man sehen, dass man diese
Route (wie beim "normalen" Routing) an eventIns anderer Knoten anschliessen
kann,

dass aber (im Gegensatz zum "normal" Routing) die Farbe dieser Route
(also eigentlich der Datentyp) mit dem abgefragten eventIn wechselt.

Wenn man die Maustaste loslässt, wird die Route vollendet.

Entsprechend lässt sich der spezielle "connect anything" eventIn
des Scriptknotens benutzen

und mit dem eventOut eines anderen Knoten verbunden.

Jetzt müssen Sie noch das "url" Feld des Scriptknoten verändern.
Neben der Benutzung von urledit können sie
auch den Scriptknoten im SceneTree Fenster und das
"url" Feld im FieldView Fenster selektieren und dann

das "Object Edit" Icon drücken (oder benutzen den Menüpunkt
Action -> Object edit).

Nun wird "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
Options -> Texteditor Settings ... Menüpunkt ändern.
Im Edit Fenster sehen Sie ein Schema des benötigten javascript Codes.
Benutzen Sie Options -> ECMAscript settings um einzustellen,
welche erweiterten Kommentare Sie im Schema haben wollen.

Benutzen Sie den Editor, um den Javascript code zu vervollständigen,
dann speichern und verlassen Sie den Editor
- im Fall des vi Editors benutzen Sie die Tastenkombination :wq
-
In der Computergraphik bedeuten NURBS eine komplizierte Rechenvorschrift,
mit deren Hilfe sich beliebige Flächen und Linien/Kurven im Raum sehr
kompakt darstellen lassen.
Gerade für eine Netzwerkstandard wie VRML ist die Unterstützung
von NURBS deshalb ein grosser Vorteil, da dabei nicht die Daten aller Eckpunkte
eines Flächennetzes über ein Netzwerk
übertragen werden müssen, sondern nur eine relative kleiner
Anzahl von Zahlenwerten, mit denen die Eckpunkte berechnet werden
können.
Das lohnt sich, da in der Vergangenheit die Rechenleistung sehr viel
stärker
gestiegen ist als die Netzwerkgeschwindigkeit (zum Vergleich: der Rechner
der 1969 das erste Zeichen ("L" von "LOGIN") über das Internetprotokoll
übertragen hat, war ein Honeywell DDP-516 minicomputer mit 12KB Speicher,
einer Taktfrequenz von 1.1 Mhz (wobei viele Takte für einen Computerbefehl
benötigt wurden) und dem Gewicht einer halben Tonne. Dieser
Rechner benutzte eine Netzwerkleitung mit 50000 baud. Das entspricht
ungefähr der Rechenleistung eines einfachen Taschenrechners und der
Netzwerkverbindung eines modernen Telefonmodems).
Piegl und Tiller schreiben in "The NURBS book", NURBS wäre ein Akronym
für "Nobody Understands nonuniform Rational B-Splines" (niemand versteht
nicht-gleichartige rationale B-Splines).
Um mit einem NURBS Modeller zu arbeiten, braucht man die entsprechende
Mathematik natürlich nicht komplett zu verstehen. Allerdings kann
es für die Benutzung eines Programms wie white_dune (das Zugriff
auf alle Zahlenwerte der NURBS Flächen/Kurven bietet) ein Einblick
in die NURBS Grundlagen sinnvoll sein.
Erstellt man in white_dune eine NURBS-Kurve (mit
Create->VRML97 Amendment 1 Node->NurbsCurve /OK), verschiebt eines
der weissen Kästchen und klappt alle Zahlenwerte im FieldView auf

so erkennt man, dass eine NURBS-Kurve im wesentlichen aus 4 Datenarten
besteht.
-
Kontrollpunkte (controlPoint):
Das sind die mit weissen Kästchen markierten Punkte.
Verschiebt man ein Kästchen, verschiebt sich ein Teil der Kurve
entsprechend.

Kontrollpunkte sind die wichtigsten Elemente in white_dune, um NURBS
zu beeinflussen.
-
Gewichte (weight):
Diese Werten bestimmen den Einfluss eines einzelnen Kontrollpunkts
auf die Kurve. Das Wort Gewicht erinnert an die Zeit vor dem Computerzeitalter,
als Graphiker Kurven mit Holzlatten (sogennanten Straklatten) und
Bleigewichten gestaltet haben.
Bleibt der Kontrollpunkt auf der gleichen Stelle und
erhöht man das entsprechende Gewicht

so wird die Kurve zum Kontrollpunkt hingezogen.
Obwohl hier der Kontrollpunkt auf der gleichen Stelle liegt, hat sich
sein Wert verändert. Das liegt daran, dass es zwei mathematisch
gleichwertige NURBS-Formeln gibt. White_dune benutzt die bei VRML
übliche Formel.
-
Knotenvektoren (knot):
Knotenvektoren bestimmen unter anderem (***)
ob ein Kontrollpunkt von der
Kurve getroffen wird und ob eine Kante auftritt. Dazu müssen die
Werte an der entsprechenden Stelle "Grad" "(Ordnung -1)" mal wiederholt werden.

-
Ordnung (order): (auch Grad+1 (degree+1))
Ueber diese Zahl wird festgelegt, wie weit der Einfluss eines
Kontrollpunkts reicht.

Der verbliebene Wert "tessellation" hat keinen mathematischen, sondern
einen praktischen Hintergrund. Er legt fest, mit wievielen Punkten/Ecken
die Kurve dargestellt wird.

Das Verändern dieses Werts erlaubt eine einfache Anpassung an
die Graphikleistung eines Rechners.

Per default (Wert "0") benutzt white_dune (das auch auf schwachen Rechnern
laufen soll) bei Objekten mit sehr vielen Kontrollpunkten zu kleine Werte
für "tessellation".
Ein Beispiel zeigt eine Nurbsfläche, die aus einer Kugel konvertiert
wurde und bei der einige Kontrollpunkte herausgezogen wurden.

Nur mit einem hohen Wert für "tessellation" zeigt sich die
"wahre" Form des Objekts.

-
Mit White_dune kann man NurbsSurface Knoten erstellen
(z.B. mit Create -> VRML97 Amendment 1 -> NurbsSurface -> plain/OK).
Man kann die entstandene Fläche verändern, indem man die weissen
Kästchen mit der Maus verschiebt.

Das verändert die Kontrolpunkte des NurbsSurface Knotens.

Mit dieser Methode kann man white_dune am sinnvollsten bei der Herstellung von
Landschaften mit Dünen

einsetzen, die Methode ist aber nicht sehr sinnvoll für die meisten
anderen Aufgaben.
Eine Menge Objekte erfordern symetrische Modellierung, die eine Seite
des Objekts soll so aussehen, wie die andere Seite.
In white_dune, kann das mit dem Menüpunkt
Actions -> X symetric modelling erreicht werden.
Wenn dieser Menüpunkt aktiviert ist, wird jede Bewegung von den
Kontrollpunkten der einen Seite

auf die andere Seite übertragen,

und es ist ziemlich einfach, eine ziemlich komplizierte symetrische
NurbsSurface Fläche zu erzeugen.

Die X Richtung für die symetrische Modellierung
wurde wegen des
Local Input Mode gewählt.
Die Entscheidung ob der symetrische Teil eines NurbsSurface Knoten
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 Options -> Preferences Dialog eingestellt werden.
Wenn symetrische Modellierung angewählt ist, schnappen fast gleiche
Punkte zusammen und werden zusammen bewegt.
Das kann benutzt werden, um offene NurbsSurface Flächen zu schliessen,
aber mehrere Kontrollpunkte auf einem Platz erzeugen eine Ecke/Kante.

Eine neu entstandene NurbsSurface Fläche existiert (in Einklang mit den
VRML Standards) per default nur einseitig (was wichtig ist,
wenn die Oberfläche nicht geschlossen ist): das Feld "solid" hat den
Wert TRUE (wahr).

In den meisten Fällen ist das nicht sehr sinnvoll:
Um die Oberfläche doppelseitig zu machen, wird das Feld "solid"
im FieldView Fenster auf FALSE (falsch) gesetzt.

Oft ist auch eine zweiseitige Fläche nicht besonders nützlich, um
einen voluminösen Körper zu bilden.
In diesem Fall ist es sinnvoll, einen Group- (Gruppen-)Knoten zu erzeugen,

den Körper mit dem NurbsSurface Knoten in den Group-Knoten zu
verschieben

und eine Kopie des Körpers mit dem NurbsSurface Knoten
zusätzlich im Group-Knoten zu erzeugen.
Um eine Kopie anzulegen, zieht man das Shape Icon mit der Maus ins
Group icon und hält dann die Kontroltaste ("Ctrl") gedrückt,
während die Maustaste noch gegedrückt ist.

Weil in diesem Beispiel das Feld "solid" immer noch FALSE ist, kann man
ein weit verbreitetes Problem des realtime 3D demonstrieren, wenn die
Farbe eines Körpers verändert wird.

Zu dünne Wände (auch "z-fighting" genannt).
Wenn sie einen Kontrollpunkt von einem NurbsSurface Knoten etwas
nach oben verschieben, um dem Körper mehr Volumen zu geben,
kann die bilderzeugende Hardware und Software nicht mehr so leicht
entscheiden, welche der beiden nah aneinanderliegende Flächen
mit welcher Farbe näher zum Betrachter angeordnet ist.

Der Effekt ist im allgemeinen nicht vorhersehbar, er kann sich mit dem
Betrachtungswinkel, der benutzten Software (zum Beispiel VRML Browser
oder Graphiktreiber) und sogar mit der benutzten Graphikkarte ändern.
Um das Problem zu vermeiden, müssen beide "solid" Felder zu TRUE
zurückgeschalten werden und das "ccw" ("Counter Clock Wise", "gegen
den Uhrzeitersinn") Feld muss sich zwischen der oberen und unteren
einseitigen Fläche unterscheiden.

Jetzt können die nichtbegrenzenden Kontrollpunkte der NurbsSurface
Knoten verschoben werden, um dem Körper mehr Volumen zu geben.
Jetzt sollte man die Shape Knoten mit den NurbsSurface Knoten von einem
Group Knoten in einen NurbsGroup Knoten.

Der NurbsGroup Knoten ist im VRML Standard verantwortlich dafür, dass
die Begrenzungen der enthaltenen NurbsSurface Knoten ohne Lücken
gezeichnet werden,
wenn die Kontrollpunkte der Begrenzungen der NurbsSurface Knoten identisch
sind.
In white_dune, erlaubt der NurbsGroup Knoten auch X symetrische Modellierung.
Änderungen eines Kontrollpunkts werden an alle NurbsSurface Knoten
weitergegeben,
die direkt (oder über einem Shape Knoten) einem NurbsGroup Knoten
enthalten sind.
Das macht es möglich, die Kontrollpunkte der Begrenzungen zu verschieben
und das ganze Objekt geschlossen zu halten.

Am Ende sollte man nicht vergessen, den NurbGroup Knoten in einen
Transform Knoten zu verschieben, sonst kann das Objekt nicht
verschoben/rotiert/skaliert usw. werden.

-
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.
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).
-
Box
Um einen Box (Würfel) Knoten in einen NurbsSurface Knoten zu konvertieren,
muss ein Box Knoten im Szenengraph angewählt werden

und der Menüpunkt actions -> convert to NurbsSurface benutzt
werden.

Wenn die "6 Plains" (6 Flächen) Schaltfläche nicht gedrückt
ist,
wird ein einziger NurbsSurface Knoten erzeugt.

Wenn die "6 Plains" Schaltfläche gedrückt ist, werden 6
Flächen in einem NurbsGroup Knoten erzeugt.

-
Cone, Cylinder und Sphere
Die Konversion dieser primitiven Körper ist ähnlich zu der
Konversion eines Box Knotens, aber die Objekte werden intern mit einer
drehenden Linie (besser NurbsCurve) erzeugt.
Zum Beispiel beim Ergebnis einer Cylinder Konversion eines

sieht man, dass es Kontrollpunkte gibt, die die Oberfläche
berühren. Dies wird erreicht, indem Werte im Knotenvektor
wiederholt werden. Als Konsequenz entsteht eine Kante, wenn der
Kontrollpunkt verschoben wird.

-
NurbsSurface aus NurbsCurve (über Drehung)
Zur Zeit bietet dieses Methode die meisten Modellierungsmöglichkeiten.
Zuerst muss ein NurbsCurve Knoten im
Scenengraph angewählt werden

Wenn ein NurbsCurve Knoten erzeugt wird (e.g. via Create ->
VRML97 Amendment 1 -> NurbsCurve ) muss in Betracht gezogen werden,
ob X symetrische Modellierung benutzt wird.
Der NurbsCurve Erzeugungsdialog

bietet drei Möglichkeiten: Kurve entlang x, entlang y, entlang z Achse.
Nur wenn die Kurve um die y oder z Achse gedreht wird, ist
X symetrische Modellierung möglich. Deswegen ist es möglicherweise
vorzuziehen, einen NurbsCurve Knoten entlang der y oder z Achse zu
erzeugen.

Die Kurvenpunkte bilden die Seitenansicht des Drehkörpers.

Mit Actions -> Convert to NurbsSurface geht es weiter.

Um X symetrische Modellierung möglich zu machen, sollte die
Schaltfläche
"Flatten Curve before rotation" ("Kurve vor der Drehung abflachen ")
gedrückt bleiben. Dabei werden alle Punkte in eine Ebene verschoben,
wobei der Abstand vom Nullpunkt erhalten bleibt.

Genau wie bei konvertierten Sphere, Cylinder und Cone Knoten, kann eine
Ecke entstehen, wenn die Kontrollpunkte verschoben werden.

-
Bei Modellieren mit NURBS Knoten kommt oft der Wunsch auf, neue
Kontrollpunkte in einer Richtung einzufügen.

Mit dem Menüpunkt Actions -> Elevate (U/V) Degree up ist
das möglich, ohne die ässere Form zu verändern.

Mit den neuen Kontrollpunkten lassen sich neue Ausbuchtungen verwirklichen.

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

Wenn zum Beispiel ein Sphere Knoten mit
Actions -> Convert to NurbsSurface konvertiert wird

und kleine u/vTesselation Werte gesetzt werden,
entstehen nur sehr wenige Flächen.

Mit Actions -> Convert nurbs to IndexedFaceSet kann das Resultat
in einem IndexedFaceSet Knoten verwandelt werden.

Um die Normalenvektoren loszuwerden, die die Farben der Flächen
verschwimmen lassen, muss der Normal Knoten vom IndexedFaceSet Knoten
entfernt werden.

Die folgende Tabelle zeigt, welche grundsätzlichen Körper
mit dem Setzen von u/vTesselation in NurbsSurface Knoten
aus konvertierten Primitiven erzeugt werden können.
Köper | Konvertiert von | uTesselation | vTesselation |
Tetraeder | Cone | 3 | 4 |
4-eckige Pyramide | Cone | 4 | 4 |
Hexaeder | Sphere/Cylinder | 3 | 2 |
Octaeder | Sphere/Cylinder | 4 | 2 |
n-eckiges Prisma | Cylinder | n | >1 |
| | | |
Die Implementierung von IndexedFaceSet in white_dune hat (noch) keine
Handles ("Anfasser", zum Beispiel weisse Kästchen, die mit der
Maus verschoben werden können).
Wenn eine NurbsSurface Fläche
Plain (Create -> VRML97 Amendment 1 -> NurbsSurface -> Plain (Nurbs))
mit Grad 1 erzeugt wird

und uTesselation auf den Wert uDimension-1 und vTesselation auf
den Wert vDimension-1 gesetzt wird,
sind die sichtbaren Ecken und die Position der Handles (des
nurbsSurface Knotens) identisch, genauso, wie es bei einem
IndexedFaceSet Knoten wäre.

Mit dem Menüpunkt Actions -> Convert nurbs to IndexedFaceSet
kann das Result in einen IndexedFaceSet Knoten verwandelt werden.

Um die Normalenvektoren loszuwerden, die die Farben der Flächen
verschwimmen lassen, muss der Normal Knoten vom IndexedFaceSet Knoten
entfernt werden.

Unglücklicherweise ist die Konversion von einem IndexedFaceSet Knoten
zurück in einen NurbsSurface Knoten not nicht implementiert...
-
White_dune unterstützt 3D-modelling, die auf der sogenannten
"superformula" ("Superformel") basiert.
pow(pow(fabs(cos(m * angle / 4.0) / a), n2) +
pow(fabs(cos(m * angle / 4.0) / b), n3), -1.0 / n1)
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.

Diese Formen
wurden alle mit dem SuperShape PROTO erzeugt.
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.
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.
-
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.
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.

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

Dieser Körper kann in ein IndexedFaceSet umgewandelt werden
-
White_dune hat auch ein PROTO für ein Superellipsoid,
ein spezieller Fall des SuperShape. Es kann benutzt werden, um eine
Kugel,

eine Box, ein Zylinder,

ein Oktaeder und abgerundete Formen dieser Kürper


mit nur 2 Parametern zu erzeugen.
Wie das SuperShape PROTO hat das SuperEllpsoid PROTO ein Feld "border",
um z.B. auch Halbkugeln modellieren zu können.

Dieser Körper kann in ein IndexedFaceSet umgewandelt werden
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.
Um das Array Werkzeug zu benutzen, muss das Objekt ausgewählt werden,
das vervielfälltigt werden soll.

Danach wird der Menüpunkt Actions -> Array benutzt.
Im folgenden Array Dialog

kann die Zahl der Objekte (Numbers Objects) und die Parameter für die
Transform Knoten eingetragen werden.

Wenn das Orginal geändert wird, ändern sich alle ge-USE-ten
Knoten ebenfalls.

(new in Version 0.27beta)
White_dune hat einen Befehl (Menüpunkt File -> Upload)
um eine VRML Datei auf einen Internet Server heraufzuladen.
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.
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.
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.
Im upload settings dialog (Options -> Upload settings...)

kann das upload Kommando zwei Parameter haben. Jeder parameter der
upload Kommandozeil wird mit Hilfe der Buchstaben "%s" gesetzt.
-
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.
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.
-
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.
-
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.
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.
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 file -> upload Kommando
dargestellt wird.

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 !
***
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.