320 likes | 426 Views
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
E N D
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 csomópont_típusa (…) USE SZINTAXISA USE csomópontnév
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 NULL #exposedField SFnode geometry NULL #exposedField 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 #field SFVec3f } #VRML V2.0 utf8 Shape { appearance Appearance { material Material { } } geometry Box { size 1.0 3.0 5.0 } }
A CONE CSOMÓPONT SZINTAXISA Cone { bottomRadius 1.0 #field SFFloat height 2.0 #field SFFloat side TRUE #field SFBool bottom TRUE #field SFBool } #VRML V2.0 utf8 Shape { appearance Appearance { material Material { } } geometry Cone { bottomRadius 3.5 height 1.5 } }
A CYLINDER CSOMÓPONT SZINTAXISA Cylinder { Radius 1.0 #field SFFloat height 2.0 #field SFFloat side TRUE #field SFBool top TRUE #field SFBool bottom TRUE #field 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 [ ] #exposedField MFString length [ ] #exposedField MFString maxExtent 0.0 #exposedField SFFloat fontStyle NULL #exposedField SFNode } A FONTSTYLE CSOMÓPONT SZINTAXISA FontStyle { family ”SERIF” #field SFString style ”PLAIN” #field SFString size 1.0 #field SFFloat spacing 1.0 #field SFFloat justify ”BEGIN” #field SFString horizontal TRUE #field SFBool leftToright TRUE #field SFBool topTobottom TRUE #field SFBool language ” ” #field SFString } Példák
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 Forgástengely értékei Jobbra az X tengely mentén 1.0 0.0 0.0 Felfelé az Y tengely mentén 0.0 1.0 0.0 Előrefelé a Z tengely mentén 0.0 0.0 1.0
AZ ELFORGATÁSI SZÖGEK MEGADÁSA Fok x 180.0 / p = radián 30.0 x 180 / p = 0.524 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 scaleOrientationmező é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 SFBool startTime 0.0 #exposedField SFTime stopTime 0.0 #exposedField SFTime cycleInterval 1.0 #exposedField SFTime loop FALSE #exposedField SFBool isActive #eventOut SFTime time #eventOut SFTime cycleTime #eventOut SFTime fraction_changed #eventOut SFFloat } 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 MFFloat keyValue [ ] #exposedField MFRotatin set_fraction #eventIn SFFloat value_changed #eventOut 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