Transcript 1. dia

VRML
Virtual Reality Markup Language
(virtuális valóságot jelölő nyelv),
később
Virtuál Reality Modelling Language
(virtuális valóságot modellező nyelv)
A VRML fájlok az alábbi négy fő összetevőből állnak:
-A VRML fejléc
-Prototípusok
-Alakzatok, interpolátorok, szenzorok és scriptek
-Útvonalak
A VRML fájl az előbbieken kívül még az alábbi elemeket
is tartalmazhatja:
-Megjegyzések
-Csomópontok
-Mezők és mezőértékek
-Definiált mezőnevek
-Használt mezőnevek
A VRML FEJLÉC SZINTAXISA
#VRML V2.0 utf8
A böngészők különbséget tesznek a kis- és a nagybetűk között. A
fejléc arról tájékoztatja a böngészőt, hogy az utána következő fájl
- VRML fájl,
- megfelel a VRML 2.0 specifikációnak és
- az UTF-8 nemzetközi karakterkészletet használja.
Megjegyzések: #-el kezdődnek
CSOMÓPONTOK
Leírják a világban lévő alakzatokat és azok tulajdonságait
A csomópontok általánosságban az alábbi elemekből állnak:
• a csomópont típusa (kötelező)
• kapcsos zárójelpár (kötelező)
• néhány mező (nem kötelező) és mezőérték, amelyek a kapcsos
zárójelpár között meghatározzák a csomópont tulajdonságait
Cylinder {
height 2.0
radius 2.0
}
MEZŐK ÉS MEZŐÉRTÉKEK
A mezők (fields) egy csomópont tulajdonságait határozzák meg.
pl:
height 2.0
radius 2.0
CSOMÓPONTOK ELNEVEZÉSE
DEF SZINTAXISA
DEF csomópont_neve
USE SZINTAXISA
USE
csomópontnév
csomópont_típusa (…)
AZ ALAKZATOK LEÍRÁSA
Egy VRML alakzatot az alábbi elemek írnak le:
• az alakzat geometriája, ami a háromdimenziós felépítését
határozza meg,
• az alakzatnak az a színes (piros, kék stb.) anyaga (material),
amiből az alakzat készül, és ami az alakzat megjelenését
(appearance) határozza meg, valamint
• a mintázat (texture) – például fa vagy tégla -, ami az alakzat
felületét határozza meg.
A VRML fájlban egy alakzat geometria és a megjelenés
tulajdonságait a Shape (alakzat) csomóponton belüli
mezőértékek határozzák meg.
ALAKZATOK CSOPORTOSÍTÁSA
Az alakzatok csoportokba foghatók össze a Group csomóponttal.
A csoport alakzatait csoportba foglaló csomópontnak szülő (parent) a
neve.
A csoportot alkotó alakzatokat a csoport gyermekeinek (children)
nevezik.
Ha egy csoportot egy nagyobb csoport tartalmaz, akkor azt mondjuk,
hogy az előző csoport be van ágyazva (nested) a nagyobb csoportba
ESEMÉNYEK ÉS ÚTVONALAK
Ahhoz, hogy a világban meglévő építményeket dinamikussá lehessen
tenni, az utasítások közé „behuzalozott” utasításokat is fel lehet venni.
A VRML-ben a huzalozás két elemből tevődik össze:
•egymással összehuzalozott csomópont-párból és
•két csomópontot összekapcsoló huzalozási útvonalból (route).
Pl:
ROUTE Clock.fraction_changed TO CubePath.set_fraction
ROUTE CubePath.value_changed TO Cube.set_translation
BEÉPÍTETT ALAKZATOK
A Shape csomópontot használva primitív alakzatokat készíthetünk.
Ilyen előre definiált vagy más néven primitív alakzat
• a Box (hasáb),
• a Cone (kúp),
• a Cylinder (henger)
• és a Sphere (gömb) csomópont.
A SHAPE CSOMÓPONT SZINTAXISA
Shape {
appearance
geometry
}
NULL
NULL
#exposedField
#exposedField
SFnode
SFnode
Az apearance mező olyan csomópontot specifikál, ami leírja az
alakzat megjelenését, beleértve a színét és a felületének mintázatát.
A geometry mező értéke olyan csomópontot specifikál, ami leírja az
alakzat 3-D formáját, vagyis a geometriáját.
A BOX CSOMÓPONT SZINTAXISA
Box
{
size
}
2.0 2.0 2.0
#VRML V2.0 utf8
Shape {
appearance Appearance {
material Material { }
}
geometry Box {
size 1.0 3.0 5.0
}
}
#field
SFVec3f
A CONE CSOMÓPONT SZINTAXISA
Cone
{
bottomRadius 1.0
#field
height
2.0
#field
side
TRUE #field
bottom
TRUE #field
}
#VRML V2.0 utf8
Shape {
appearance Appearance {
material Material { }
}
geometry Cone {
bottomRadius 3.5
height 1.5
}
}
SFFloat
SFFloat
SFBool
SFBool
A CYLINDER CSOMÓPONT SZINTAXISA
Cylinder
Radius
height
side
top
bottom
}
{
1.0
2.0
TRUE
TRUE
TRUE
#field
#field
#field
#field
#field
SFFloat
SFFloat
SFBool
SFBool
SFBool
#VRML V2.0 utf8
Shape {
appearance
Appearance {
material
Material { }
}
geometry Cylinder {
radius 4.0
height 1.0
}
}
A SPHERE CSOMÓPONT SZINTAXISA
Sphere
{
radius
1.0
#field
SFFloat
}
A GROUP CSOMÓPONT SZINTAXISA
Group
}
{
children [ ] #exposedField
MFNode
bboxCenter 0.0 0.0 0.0 #field
SFVec3f
bboxSize -1.0 -1.0 -1.0 #field SFVec3f
addChildren
#eventIn MFNode
removeChildren
#eventIn MFNode
GROUP CSOMÓPONT PÉLDA
#VRML V2.0 utf8
Group { children [
Shape {
appearance DEF White Appearance {
material Material { } }
geometry Box {
size 25.0 2.0 2.0
}
},
Shape {
appearance USE White
geometry Box {
size 2.0 25.0 2.0
}
},
Shape {
appearance USE White
geometry Box {
size 2.0 2.0 25.0
} } ] }
A TEXT CSOMÓPONT SZINTAXISA
Text
{
string
[
length
maxExtent
fontStyle
]
#exposedField
[ ]
#exposedField
0.0
#exposedField
NULL #exposedField
MFString
MFString
SFFloat
SFNode
}
A FONTSTYLE CSOMÓPONT SZINTAXISA
FontStyle
{
family
style
size
spacing
justify
SFString
horizontal
leftToright
topTobottom
language
}
”SERIF”
#field
SFString
”PLAIN”
#field
SFString
1.0
#field
SFFloat
1.0
#field
SFFloat
”BEGIN”
#field
TRUE
TRUE
TRUE
” ”
#field
#field
#field
#field
SFBool
SFBool
SFBool
SFString
A TRANSFORM CSOMÓPONT SZINTAXISA
Transform
{
children
[ ]
#exposedField MFNode
translation 0.0 0.0 0.0 #exposedField SFVec3f
rotation 0.0 0.0 1.0 0.0 #exposedField
SFRotation
scale
1.0 1.0 1.0
#exposedField SFVec3f
scaleOrientation 0.0 0.0 0.0 #field
SFVec3f
bboxSize -1.0 -1.0 -1.0 #field
SFVec3f
center
0.0 0.0 0.0 #exposedField SFVec3f
addChildren
#eventIn
MFNode
removeChildren
#eventIn
MFNode
}
FELADATOK
1. FELADAT:
Készítsünk egy hengert, azon álljon egy kocka és a kocka tetején egy
henger. (Minden primitív geometriának a méretei lehetnek
alapértelmezésbeliek.)
2. FELADAT:
Írjunk egy tetszés szerinti szöveget tetszés szerinti betűtípussal és
formázással.
3. FELADAT:
Az előző feladatbeli alkotásainkat toljuk el a világban tetszés szerinti
pozícióba.
ALAKZATOK ELFORGATÁSA
A Transform csoportosító csomópont és ennek rotation és center mezői
segítségével alakzatokat és alakzatok csoportjait forgathatunk el
egy koordinátarendszer kezdőpontja vagy egy általunk megadott
középpont körül.
Szokásos forgástengelyek értékei:
Irány
Jobbra az X tengely mentén
Felfelé az Y tengely mentén
Előrefelé a Z tengely mentén
Forgástengely értékei
1.0
0.0
0.0
0.0
1.0
0.0
0.0
0.0
1.0
AZ ELFORGATÁSI SZÖGEK MEGADÁSA
Fok
Radián
0.0
0.000
Fok x 180.0 / p = radián
1.0
0.017
2.0
0.035
30.0 x 180 / p = 0.524
5.0
0.087
10.0
0.175
20.0
0.349
30.0
0.524
45.0
0.785
90.0
1.571
180.0
3.141
270.0
4.712
360.0
6.282
Radián x p = fok
0.785 x p = 45.0 fok
AZ ELFORGATÁS JOBBKÉZ-SZABÁLYA
Jobb kezünkkel megragadjuk a forgástengelyt, az ujjainkat behajlítjuk a
tengely mentén, és a hüvelykujjunkat kinyújtjuk a tengely pozitív
irányába.
Egy pozitív elforgatási szög ugyanabba az irányba forgatja el a
koordinátarendszert a forgástengely körül, mint amilyen irányba a
többi ujjunk be van hajlítva.
A TRANSFORM CSOMÓPONT SZINTAXISA
Transform
{
children
[ ]
#exposedField MFNode
translation 0.0 0.0 0.0 #exposedField SFVec3f
rotation 0.0 0.0 1.0 0.0 #exposedField
SFRotation
scale
1.0 1.0 1.0
#exposedField SFVec3f
scaleOrientation 0.0 0.0 0.0 #field
SFVec3f
bboxSize -1.0 -1.0 -1.0 #field
SFVec3f
center
0.0 0.0 0.0 #exposedField SFVec3f
addChildren
#eventIn
MFNode
removeChildren
#eventIn
MFNode
}
A ROTATION NYITOTT MEZŐ
A rotation mező első három értéke egy 3-D koordinátapont X, Y, Z
tengelyű összetevőit adja meg, az új eltolt koordinátarendszerben. Az
ezt a koordinátapontot az eltolt kezdőponttal összekötő képzeletbeli
egyenes adja meg az elforgatás tengelyét. A rotation mező negyedik
értéke írja elő a radiánokban mért pozitív vagy negatív elforgatási
szöget.
A center nyitott mező értékei azt a 3-D koordinátapontot határozzák
meg az új, eltolt koordinátarendszerben, ami körül az elforgatás történik.
A translation, a center és a rotation mezők értékeit egymással
kombinálva használjuk, akkor a böngésző bizonyos sorrend szerint jár
el.
A böngésző az új koordinátarendszert
• elforgatja a forrásközpont körül, majd
• a szülő koordinátarendszerhez képest eltolja.
Példák
ALAKZATOK ÁTMÉRETEZÉSE
A Transform csoportosító csomópont és ennek scale és scaleOrientation
mezőjének segítségével tetszés szerint méretezhetjük át az alakzatokat vagy
az alakzatok csoportját.
A scale nyitott mező értékei az X, Y és Z irányú méretarányt határozzák meg
az új koordinátarendszer számára. Az alapértelmezés szerinti 1.0 érték azt
jelenti, hogy egyik tengely irányában sincs átméretezés. Méretarányokként
csak pozitív értékeket szabad megadni.
A scaleOrientation mező értékei azt a forgástengelyt és elforgatási szöget
adják meg, ami körül, illetve amilyen mértékben az új koordinátarendszert az
átméretezése előtt el kell forgatni, majd az átméretezést követően vissza kell
forgatni.
A center nyitott mező értékei azt a 3-D koordinátapontot határozzák meg az új,
eltolt koordinátarendszerben, ami körül az elforgatás és az átméretezés
történik. Az alapértelmezés szerinti elforgatási és átméretezési középpont a
koordinátarendszer kezdőpontja.
ALAKZATOK ÁTMÉRETEZÉSE
A translation, a center, a rotation, a scale és a scaleOrientation mezők
értékeit egymással kombinálva használjuk, akkor a böngésző bizonyos
sorrend szerint jár el.
A böngésző az új koordinátarendszert
• átméretezi a középpont körül, először az átméretezéshez
használandó elforgatás szerint
• elforgatja a forgásközpont körül, majd
• a szülő koordinátarendszerhez képest eltolja.
A translation, a center, a rotation, a scale és a scaleOrientation mezők
tetszőleges sorrendben adhatók meg a Transform csomóponton belül,
ettől függetlenül azonban ezeket a böngésző mindig ebben a
sorrendben alkalmazza.
Példák
A HELY, AZ IRÁNY ÉS A MÉRETVÁLTOZÁS
ANIMÁLÁSA
Egy alakzatcsoport koordinátarendszerének animálásával elérhetjük,
hogy ezek az alakzatok a kívánságunk szerint repüljenek, más helyre
kerüljenek, elforduljanak vagy más méretet vegyenek fel a világunkban.
Az animálás indításában, leállításában a TimeSensor csomópont az
óra szerepét tölti be.
Ahogy múlik az idő, ez az érzékelő eseményeket generál, melyekkel
jelzi az időben bekövetkező változásokat.
A koordinátarendszerek eltolásának, elforgatásának és
átméretezésének kiváltásához a TimeSensor csomópont eseményeit
PositionInterpolator és OrientationInterpolator csomópontokra
küldhetjük. E csomópontok mindegyike új eltolási és elforgatási
értékeket küld ki az eseményküldőjükön keresztül. Ha most ezeket az
eseményeket egy Transform csomópontra irányítjuk, akkor a
csomópont koordinátarendszere az animáció előrehaladásának
megfelelően eltolódik, elfordul vagy megváltoztatja a méretét.
A HELY, AZ IRÁNY ÉS A MÉRETVÁLTOZÁS
ANIMÁLÁSA
A VRML ROUTE szintaxisa segítségével a TimeSensor csomópont
egyik kimenetét összekötjük a PositionIterpolator vagy az
OrientationInterpolator csomópont bemenetével. Ezután egy másik
útvonalat használva az egyik interpolator csomópont kimenetét
összekötjük egy Transform csomópont bemenetével.
Egy korábbi példa:
ROUTE Clock.fraction_changed TO
CubePath.set_fraction
ROUTE CubePath.value_changed TO Cube.set_translation
A „MOZGÁSIDŐ” - FRACTIONAL TIME
Az ilyen animációt tipikusan mozgásidők segítségével írják le.
Mozgásidőt (fractional time) használva úgy kell elképzelni egy
animációt, hogy az a 0.0 mozgásidőben indul és az 1.0 mozgásidőben
fejeződik be. A 0.0. és az 1.0. mozgásidő közötti időtartam független az
abszolút időtől. (lehet 5 másodperc vagy 30 perc is) A 0.0.és az 1.0
mozgásidő közötti időtartam neve ciklusintervallum, és a TimeSensor
csomópont cycleInterval mezőjének értékével adható meg.
Egy korábbi példa:
ROUTE Clock.fraction_changed TO
CubePath.set_fraction
ROUTE CubePath.value_changed TO Cube.set_translation
A TIMESENSOR CSOMÓPONT SZINTAXISA
TimeSensor
{
enabled
TRUE #exposedField
startTime
0.0
#exposedField
stopTime
0.0
#exposedField
cycleInterval 1.0
#exposedField
loop
FALSE #exposedField
isActive
#eventOut
time
#eventOut
cycleTime
#eventOut
fraction_changed
#eventOut
SFFloat
}
SFBool
SFTime
SFTime
SFTime
SFBool
SFTime
SFTime
SFTime
Egy korábbi példa:
ROUTE Clock.fraction_changed TO
CubePath.set_fraction
ROUTE CubePath.value_changed TO Cube.set_translation
A POSITIONINTERPOLATOR CSOMÓPONT
SZINTAXISA
A PositionInterpolator csomópont kulcspozíciók sorozatát írja le,
amelyek alkalmasak arra, hogy animációban használjuk őket.
PositionIterpolator
{
key
[ ]
#exposedField
MFFloat
keyValue
[ ]
#exposedField
MFVec3f
set_fraction
#eventIn
SFFloat
value_changed
#eventOut
SFVec3f
}
Egy korábbi példa:
ROUTE Clock.fraction_changed TO
CubePath.set_fraction
ROUTE CubePath.value_changed TO Cube.set_translation
AZ ORIENTATIONINTERPOLATOR CSOMÓPONT
SZINTAXISA
Az OrientationInterpolator csomópont olyan kulcsforgatások
sorozatát írja le, amelyek alkalmasak arra, hogy animációban
használjuk őket.
OrientatioIterpolator
{
key
[ ]
#exposedField
keyValue
[ ]
#exposedField
set_fraction
#eventIn
value_changed
#eventOut
}
MFFloat
MFRotatin
SFFloat
SFRotation
Egy korábbi példa:
ROUTE Clock.fraction_changed TO
CubePath.set_fraction
ROUTE CubePath.value_changed TO Cube.set_translation
Példák
VÉGE
Példák