Eines der Vorteile von VRML ist die Tatsache, dass das Format eines VRML Files normiert und damit bekannt ist. Zusammen mit der Tatsache, dass VRML in leicht zu bearbeitbaren Textfiles abgespeichert werden, ergibt sich damit die Möglichkeit, VRML einfach "von Hand" mit einem Texteditor zu bearbeiten.
Dafür gibt es mehrere mögliche Gründe:
Ein "beliebter" Fehler von Werkzeugen, die VRML-Files schreiben, ist das
Problem mit dem Directorypfad von Bilddateien. Viele Werkzeuge benutzen
einen absoluten Pfad (statt besser einen relativen Pfad), der
spätestens dann
nicht mehr stimmt, wenn die Dateien später auf einen Webserver
übertragen werden.
Zur Erkl¨rung: ein absoluter Directorypfad enthält sämtliche
Unterdirectories (z.B. /usr/home/wasweisich), während
ein relativer Pfad nur den Pfad beschreibt, um von einem File zum
nächsten zu kommen (z.B. ../wasweisich)).
Ein kleines Beispiel dazu finden Sie hier. In dieser Datei ist die folgende Bilddatei nicht sichtbar. Wenn Sie cosmoplayer als VRML-Browser benutzen, können sie sich die Fehlermeldung ansehen, indem sie die Taste "\" drücken.
Laden sie diese beiden Dateien zu sich herunter und versuchen Sie das Probelm mit einen Texteditor zu lösen.
Schlagen Sie in der Knotenliste des VRML-Standard unter "Appearance" nach, wonach Sie in dieser Textdatei suchen müssen und was sie ändern müssen.
Als nächstes ein Beispiel, das wenig geeignet scheint für viele mausorientierte Werkzeuge.
Eine Animation, bei der die Eckpunkte eines aus Einzelflächen zusammengesetzten Körpers bewegt werden, nennt man "Morphing". In einem Werkzeug wie z.B. cosmoworlds kann die Erstellung sehr aufwendig sein, da eine sehr grosse Anzahl von Eckpunkten dazu angefasst werden muss.
Eine Alternative dazu bildet die hier vorgestellte Vorgehensweise mit Hilfe eines Texteditors und des Programms tessel .
Tessel ist ein Programm, mit dessen Hilfe ein VRML1 File (oder auch einige andere weit verbreitete 3D Fileformate) aus einer mathematischen Formel (genauer: einer 2 dimensionalen Parametrisierung einer Oberfläche im 3 dimensionalen Raum) gewonnen werden kann. Für Architekten dürfte das vermutlich für die Berechnung von freitragenden Konstruktion wie das Münchener Olympiastadion interessant sein.
Ein Beispiel:parametric map cartesian uname u vname v urange -1 1 4 open vrange -1 1 4 open c1 u c2 v c3 u*u+v*v colormode none #set axes .true. set zoom 2 vrml eins.vrml endparametric
Eine zweite Datei zwei.tess enthält eine ähnliche Formel
parametric map cartesian uname u vname v urange -1 1 4 open vrange -1 1 4 open c1 u c2 v c3 -abs(u)+abs(v) colormode none #set axes .true. set zoom 2 vrml zwei.vrml endparametricMit dem Befehl
Wichtig in diesem Zusammenhang ist, dass die Anzahl und der Aufbau der einzelnen Polygone (hier Rechtecke) identisch ist. Das ist Voraussetzung für die Benutzung eines CoordinateInterpolator Knoten, der in VRML für Morphing benutzt wird.
Zum Beispiel sieht das von cosmoworlds nach vrml2/vrml97 gewandelt File
"eins.vrml" so aus:
#VRML V2.0 utf8 CosmoWorlds V1.0
Group {
children Group {
children [
NavigationInfo {
avatarSize 0
}
Collision {
children Group {
children Group {
children Shape {
appearance Appearance {
material DEF Def_Color Material {
diffuseColor 1 0 0
}
}
geometry IndexedFaceSet {
coord Coordinate {
point [ -1 -1 2,
-1 -0.333333 1.11111,
-1 0.333333 1.11111,
-1 1 2,
-0.333333 -1 1.11111,
-0.333333 -0.333333 0.222222,
-0.333333 0.333333 0.222222,
-0.333333 1 1.11111,
0.333333 -1 1.11111,
0.333333 -0.333333 0.222222,
0.333333 0.333333 0.222222,
0.333333 1 1.11111,
1 -1 2,
1 -0.333333 1.11111,
1 0.333333 1.11111,
1 1 2 ]
}
coordIndex [ 0, 4, 5, 1, -1, 1, 5, 6,
2, -1, 2, 6, 7, 3, -1, 4,
8, 9, 5, -1, 5, 9, 10, 6,
-1, 6, 10, 11, 7, -1, 8, 12,
13, 9, -1, 9, 13, 14, 10, -1,
10, 14, 15, 11, -1 ]
solid FALSE
creaseAngle 0.5
}
}
}
}
collide FALSE
}
]
}
}
geometry IndexedFaceSet {
coord Coordinate {
point [ -1 -1 2,
-1 -0.333333 1.11111,
-1 0.333333 1.11111,
Für Morphing ergibt sich folgendes Kochrezept:
#VRML V2.0 utf8
# Von hier
# vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
Group {
children Group {
children [
NavigationInfo {
avatarSize 0
}
Collision {
children Group {
children Group {
children Shape {
appearance Appearance {
material DEF Def_Color Material {
diffuseColor 1 0 0
}
}
geometry IndexedFaceSet {
coord
# hier einen Namen fuer Routes einfuegen
DEF COORD Coordinate {
point [ -1 -1 2,
-1 -0.333333 1.11111,
-1 0.333333 1.11111,
-1 1 2,
-0.333333 -1 1.11111,
-0.333333 -0.333333 0.222222,
-0.333333 0.333333 0.222222,
-0.333333 1 1.11111,
0.333333 -1 1.11111,
0.333333 -0.333333 0.222222,
0.333333 0.333333 0.222222,
0.333333 1 1.11111,
1 -1 2,
1 -0.333333 1.11111,
1 0.333333 1.11111,
1 1 2 ]
}
coordIndex [ 0, 4, 5, 1, -1, 1, 5, 6,
2, -1, 2, 6, 7, 3, -1, 4,
8, 9, 5, -1, 5, 9, 10, 6,
-1, 6, 10, 11, 7, -1, 8, 12,
13, 9, -1, 9, 13, 14, 10, -1,
10, 14, 15, 11, -1 ]
solid FALSE
creaseAngle 0.5
}
}
}
}
collide FALSE
}
]
}
}
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# bis hier die Datei eins.vrml (+ Einfuegen von "DEF COORD")
# Definition des CoordinateInterpolator
DEF INTERPOL CoordinateInterpolator {
key [0,1]
keyValue [
#points aus "eins.vrml"
-1 -1 2,
-1 -0.333333 1.11111,
-1 0.333333 1.11111,
-1 1 2,
-0.333333 -1 1.11111,
-0.333333 -0.333333 0.222222,
-0.333333 0.333333 0.222222,
-0.333333 1 1.11111,
0.333333 -1 1.11111,
0.333333 -0.333333 0.222222,
0.333333 0.333333 0.222222,
0.333333 1 1.11111,
1 -1 2,
1 -0.333333 1.11111,
1 0.333333 1.11111,
1 1 2
#points aus "zwei.vrml"
-1 -1 0,
-1 -0.333333 -0.666667,
-1 0.333333 -0.666667,
-1 1 0,
-0.333333 -1 0.666667,
-0.333333 -0.333333 0,
-0.333333 0.333333 0,
-0.333333 1 0.666667,
0.333333 -1 0.666667,
0.333333 -0.333333 0,
0.333333 0.333333 0,
0.333333 1 0.666667,
1 -1 0,
1 -0.333333 -0.666667,
1 0.333333 -0.666667,
1 1 0
]
}
# Timersensor
DEF TIMER TimeSensor {
cycleInterval 10
loop TRUE
}
# noetige Routes
ROUTE INTERPOL.value_changed TO COORD.set_point
ROUTE TIMER.fraction_changed TO INTERPOL.set_fraction
Benutzen Sie dieses Kochrezept, um Morphing mit Hilfe von einer grösseren
Zahl Einzelflächen (Sie müssen die Zahl 4 in den Tessel Eingabefiles
erhöhen) und anderen mathematischen Formeln zu machen.
Die benötigten Mathematischen Formeln finden Sie z.B.
hier
und
hier