A VRML nyelv alapjai

A VRML (Virtual Reality Modeling Language) 1.0 - ás verziója 1995 februárjában jelent meg az interneten. Az e nyelven megírt *.wrl , azaz wrl kiterjesztésű programok (például) a Netscape 3.0 , a Netscape 3.0 Gold , vagy a Netscape Communicator browser -rel futtathatók.

Aki ilyen keresőprogrammal jutott erre a WWW oldalra, próbálja beolvasni ezt a legelső keze ügyébe eső fájlt.

Ha ezzel sikerült egy rajzot elővarázsolnia, itt folytassa az olvasást, ha nem akkor bizonyára a az ön által használt HTML megjelenítő (browser) telepítésekor nem csatolta a vrml fájlok megjelenítését biztosító programok egyikét sem, vagy ehhez a browserhez nincs is ilyen megjelenítő.


Mi ebben a leírásban főként a Live3D megjelenítőre fogunk hivatkozni, ezért kérjük töltse le az ön gépének megfelelő programot, amelyet elindítva fel tudja készíteni az ön által használt keresőprogramot a vrml fájlok megjelenítésére. A Live3D a Netscape Navigator Gold keresőprogram plug-in -je, ezért, ha ezt a szöveget más browserrel olvassa, térjen át erre a megjelenítőre, bizonyára le tudja tölteni a hálózatról, pl. innen.

Ha az ön a Netscape Navigatorral  olvassa ezeket a sorokat, és még nem fut a Live3D  VRML megjelenítő, akkor Win 95 , vagy Win 98 aoperációs rendszert használva a megfelelő plug-in: 3dns32g.exe (Létezik ugyan a Live3D megjelenítőnek a későbbi (3dns32h.exe ) változata is de ezt nem ajánljuk, mert a sok lapból álló alakzatokat nem heleníti meg.)
Ha Win 3.1 -es operációs rendszert használ, akkor ezzel egészítheti ki HTML megjelenítőjét:  3dns16h.exe

Egy 2004-ben tett megjegyzés:
Ez a weboldal, valamint az egész VRML 1.0-ról irt anyag  lényegében 1997-ben készült. Reméljük, nem túl sokat vesztett azóta sem az aktualitásából. Az újabb verziójú NETSAPE browserek már nem feltétlenül kompatibilisek a fenti Plug-in ekkel. Ezért  javasoljuk  a
NETSCAPE NAVIGATOR GOLD browser (béta verzió) teljes letöltését és installálását, amely a PC WORD 1996-os októberi számában jelent meg. Ez tartalmazza a LIVE3D  plug-int is. Úgy véljük, most (2004-ben) sem találhatók ennél lényegesen jobb VRML(1.0)  megjelenítők. Ennek talán az az oka, hogy 1996-ban még úgy tűnt, hogy a VRML a térgeometiai alakzatok megjelenítésének a legjobb eszköze, később azonban más irányba (JAVA alapú alkalmazások) irányába fordultak a fejlesztők, így a vrml megjelenítők fejlesztése megrekedt. Az új nem feltétlenül jobb. Aki ismer a (Live3d -n kívül) a térgeometriai alakzatok interaktív mozgatására olyan kényelmes eszközt, amely a bal egér gombbal a kamerát, jobbal magát az alakzatot mozgatja  kérem jelezze.                                                                           
                                                                                                                                                                                       
 Szilassi Lajos

 Ha a telepítés sikerült, ismét kísérelje meg az előbbi VRML fájl beolvasását.



Mi itt a VRML 1.0 programmal fogunk kissé alaposabban megismerkedni. Ezt ajánljuk a kezdő VRML felhasználóknak is. Csak annak célszerű a jóval bonyolultabb VRML 2.0 -vel foglalkoznia (akár aVRML jelenetek szemlélése, akár ilyen fájlok készítése céljából), aki már kellő jártasságra tett szert a VRML 1.0 világában.

Ezen belül főként a Live 3D megjelenítő kezelését, tulajdonságait elemezzük. Tapasztalataink szerint ugyanis ez a szóba jöhető megjelenítők között az egyik legegyszerűbb, leggyorsabb, legkisebb hardware kiépítettség mellett is jól használható. Hátránya, hogy nem alkalmas a VRML 2.0 -ban irt fájlok megjelenítésére.

Az előbb látott VRML jelenetben egy rajzot találunk, három, egymásra páronként merőleges un. arany-téglalap rajzát. Próbálkozzunk kicsit játszani az egérrel, lenyomott bal, ill. jobb billentyű mellett. Ezzel mozgathatóvá válik az ábrázolt alakzat. Mivel ez a rajz mozgatható, szokás inkább jelenetnek hívni a képernyőn látottakat. Nem fosztjuk meg az olvasót - pontosabban a megjelenítő használóját - az önálló felfedezés örömétől, kitalálható, hogy milyen egér, ill. billentyű hatásokra miként változik, mozog az ábrázolt tárgy képe, színe (világítása), azaz a jelenet.

Ez a nyelv lényegében (sokszögekből álló) térgeometriai alakzatok megjelenítést tűzi ki célul, ennek megfelelően az alakzatok megadásával, megjelenítésével kapcsolatos problémák megoldására specializálódik.

A VRML nyelvet legkönnyebben példákon keresztül ismerhetjük meg. Javasoljuk az olvasónak, hogy ezt a leírást, valamint az itt beolvasott *.wrl kiterjesztésű fájlokat töltse le a saját gépére, és az itt olvasottak jobb megértése céljából módosítsa, egészítse ki, bővítse saját készítésű, ill. a WWW -ről hozott újabb fájlokkal.

Egy új programnyelv megismerésekor mindig első kérdés, hogy milyen a nyelv szerkezete, jelen esetben pedig a legfontosabb kérdések: az ábrázolt geometriai alakzat leírására, az ábrázolt geometriai alakzat megjelenítése, tulajdonságai (színe, megvilágítása, a koordináta-rendszerben elfoglalt helye, stb.) és természetesen a keletkezett kép interaktív változtatása, amelynek azért mégis csak tudatosnak kell lennie. Mindezek a kérdések természetesen egyszerre vetődnek fel, ezért azt ajánljuk az olvasónak, hogy az érdeklődésének megfelelően maga válassza ki az ismeretek megszerzésének a sorrendjét, akár úgy, hogy először csak nagy vonalakban ismerkedjen meg egy-egy kérdéssel, későbbre halasztva a részletekben rejlő "finomságok" megismerését.

A VRML nyelv szerkezete

Bevezetésül hívjunk be egy igen rövid fájlt a kocka.wrl -t . Ennek a meglepően rövid fájlnak az ASCII kódja:

Minden VRLM 1.0 nyelven megírt programnak ugyanezzel a #VRML V1.0 ascii sorral kell kezdődnie.

A nyelv szerkezete blokkokra  - csomópontokra  - (node)  tagolható: ezek a tulajdonság-, az alakzat- , valamint a csoport- blokk. Minden blokk a neve után írt { jellel kezdődik, és a} jellel fejeződik be. A csoportblokk neve Separator , a tulajdonság blokk neveként szereplő szavakat a nyelv leírásából ismerhetjük meg. Az alakzatblokkban lehetnek a nyelv alapértelmezésében szereplő, vagy általunk definiált nevek. Az előbbi példánkban az iniciáló sort egyetlen főblokk (csoportblokk) követi, amely jelen esetben egyetlen alakzatblokkot ( Cube { } ), egy kocka megrajzolását tartalmazza. Érdemes kipróbálni, hogy itt még a csoport kezdő és záró sora is elhagyható, ezzel igazán rövid, de működő programhoz jutunk. Ezen a rövid példán keresztül megérthetjük a nyelv filozófiáját: minden olyan adatnak, amit mi nem adtuk meg a programban, de a rajz elkészítéséhez elengedhetetlenül szükséges (pl. az alakzat színe, világítás, a kamera - alakzathoz viszonyított - helyzete, a koordinátarendszer méretezése, stb.) van egy optimálisan beállított alapértéke, amely lehetővé teszi a rajz elkészítését. Természetesen, ha mi pl. egy piros kockát szeretnénk ábrázolni ortogonális axonometriában, úgy, hogy már a megjelenő rajzon lássuk három lapját, akkor ezeket a feltételeket a program fájlban meg kell adnunk, felülírva az eredetileg megadott értékeket.

A # jelet követően megjegyzést írhatunk a programba, amely azonban nem nyúlhat át a következő sorba. Ettől eltekintve nincs jelentősége annak, hogy mit írunk új sorba, itt (is) az áttekinthetőség szempontja dominál.


Most nézzünk egy bonyolultabb példát. Futtassuk a testek.wrl jelenetet! A programlista alapos elemzése a legtöbbször kellő információt nyújt egy nyelv szintaxisának a - kezdő szintű - megismeréséhez.

} # a főblokk << vége>>

A fenti példában pl. a főblokk öt csoportblokkból (kúp és téglatest; egyedüli téglatest; gömb;  henger és téglatest; szöveg) és egy alakzatblokkból (a kocka)  áll. A főblokkhoz nem írtunk tulajdonságblokkot, így a kocka az alapértelmezett színt (szürke) kapta. Ugyancsak az alapértelmezés szerinti színt kapta a szöveg, mivel nem írtunk szín beállítást a csoportblokkjába. A "kúp és téglatest" blokk két tulajdonságblokkot (szín és eltolás), egy alakzat blokkot (a kúp) és egy csoportblokkot tartalmaz, amely maga is egy eltolást adó tulajdonságblokkból és egy téglatestet definiáló alakzat blokkból áll.

Egy csoportblokknak - amennyiben tartalmaz rajzolásra váró alakzatot - , vagy egy alakzatblokknak önállóan is futtathatónak kell lennie. Egy tulajdonságblokknak pedig nyilvánvalóan valamilyen alakzatra (vagy alakzatot is tartalmazó csoportra) kell vonatkoznia. Az ugyanolyan típusú blokkok sorrendje tetszőleges, de a tulajdonság- blokknak meg kell előznie azt az alakzat-, vagy csoportblokkot, amelyre vonatkozik. Egy blokkon belüli alakzat-, vagy csoportblokk -a leszármazott (gyermek) - örökli a tartalmazó - ős (szülő) - blokk tulajdonságait, hacsak nem vesz fel helyettük új (a leszármazott blokkon belül megadott) tulajdonságokat.

Ha valamely blokkban szintaktikai hibát vétünk, (pl. elhagyjuk a megjegyzésünk előtti # jelet), akkor a hibát tartalmazó blokk - de csak ez - nem kerül végrehajtásra. A nyelvben a kis- és nagybetű felcserélése nem megengedett. Íme két ilyen típusú hiba hatása.

Ez a megállapítás azonban nem A VRML nyelvnek, hanem a Live3D megjelenítőnek a tulajdonsága. Az előbbi fájlt -mivel tartalmaz hibát -  pl. a COSMO PLAYER megjelenítő, amely a VRML 1.0 -ban írt fájlokat a megjelenítés előtt konvertálja 2.0 formátumra, egyáltalán nem tudja megjeleníteni.

 A program fejlécét tartalmazó első sorba a #VRML karaktersorozat elé semmi nem kerülhet. PL ha a # jel helyett egy szóközzel kezdődik a fájl, nem fut az egész program.

Mivel a *. wrl  fájlok ASCII kódban írt programok, minden olyan szövegszerkesztővel módosíthatók, amely csak ASCII kódokat tartalmaz. (Norton editor, Pascal szerkesztő, a WIN 95 jegyzettömbje,stb.)

A további példaprogramok elemzéséhez ajánljuk, hogy a Netscape 3.0 View /Document Source menüpontjával vizsgálja meg a kedves olvasó az éppen futtatott VRML fájl ASCII kódú forrásprogramját. Bár azt is megteheti, hogy valamely ASCII kódú szövegszerkesztővel folyamatosan végrehajtja az itt leírt , vagy önállóan kigondolt módosításokat, a használt browser reload menüpontjával (a Netscape esetében Ctrl - R) állandóan ellenőrzi a változtatás eredményét.


Geometriai alakzatok nyelvi leírása (alakzat-blokk)

Mint említettük, a VRML nyelv tulajdonképpen síklapok (síklapú testek) ábrázolására alkalmas. Tapasztalni fogjuk, hogy a görbe felületeket is síkidomokkal (háromszögekkel) közelítjük meg. Ha két, vagy több síkidom metszi egymást, akkor a program(nyelv) gondoskodik arról, hogy ezeket a helyes láthatóság szerint ábrázolja.

Ha az eddig bemutatott "előre gyártott" alakzatokat az interaktív lehetőségeinket kihasználva annyira megközelítjük, hogy a nézőpontunk a tárgyon belül legyen, akkor azt tapasztaljuk, hogy mindegyikük belülről nézve átlátszó. A jelenséggel majd itt ismerkedünk meg részletesebben.

Geometriai alakzatok tulajdonságai (tulajdonság-blokk)

Bevezetésképpen itt említjük meg, hogy a leszármazott (belső, v. gyermek) csoportblokkban megadott tulajdonság blokkok egy része felülírja a ős (külső, v. szülő) csoportblokk tulajdonságait, - ilyen pl. az alakzat színét meghatározó tulajdonságblokk - más részük,  -  pl. az eltolásra vonatkozó  - módosítja azt oly módon, hogy végrehajtódik a külső, majd a belső blokkban megadott transzformáció is.

Ha ugyanaz a csoportblokk több geometriai transzformációt, pl. egy forgatást és egy eltolást tartalmaz, akkor ezeket a program a felírt sorrendben hajtja végre, emiatt alaposan meg kell terveznünk a transzformációk sorrendjét.

AVRML nyelven megírt ASCII fájljainkat - amennyiben a Netsape 3.0 browserrel olvastuk be - a Live3D program jeleníti meg, így most ennek a megjelenítőnek a (koránt sem teljes) leírását kíséreljük meg. Előfordulhat, hogy más megjelenítő programmal más kezelési feltételekkel jutunk az itt leírtakhoz hasonló ábrákhoz.

Elöljáróban elgondolkodhatunk azon, hogy ha egy geometriai alakzatot mozogni látunk a képernyőn, akkor a legtöbbször ezt a mozgást felfoghatjuk úgy is, mint ha a tárgy rögzített helyen állna és mi körüljárjuk, megnézzük máshonnan, fölé, vagy alá tekintünk, stb. Ugyanezt a látványt úgy is felfoghatjuk, mint ha mi állnánk egy helyben és a tárgy mozogna körülöttünk. Még e két eset kombinációja is előfordulhat (akár ebben a leírásban is). Lényegét tekintve mindenképpen egy dolog történik (a mi elképzeléseinktől függetlenül): meghatározott módon változik a centrum, a képsík és az ábrázolt tárgy kölcsönös helyzete.

Vizsgálódásunk tárgyául válasszuk a már látott színpalettát.

 Rendre próbáljuk ki a vrml kép (alsó) menüsorában lévó kapcsolók hatását. A walk, spín, look és a slide menüpontok közül mindig pontosan egy az aktív, amelyet a szokott módon, klikkentéssel választhatunk ki. A lamp egy kétállapotú kapcsoló, a wiew pedig egy nyomógomb, melyekre ráklikkenthetünk.

A jobboldali egérgombbal egyszer klikkentve kinyílik egy menü ablak. Az itt feltáruló lehetőségek közül csak a legfontosabbakat említjük.


Koránt sem állíthatjuk, hogy ezzel teljes leírását adtuk a vrml nyelvnek. Reményeink szerint már az eddigiek alapján is kaphat az érdeklődő annyi eligazítást, amely elegendő néhány egyszerűbb önálló vrml fájl előállítására. Ugyanis úgy véljük, a saját (programírás közben szerzett) tapasztalat a legjobb tanítómester.

Bár az eddigiek alapján egy alkalmas szövegszerkesztővel igen igényes jelenetsort állíthat össze a kellő kreativitással , ambícióval megáldott olvasó, azonban ennek a munkának igen sok buktatója lehet. Talán legnagyobb az, hogy egy szintaktikai hibát esetenként igen nehéz felismerni, többnyire csak az eredményét látjuk, ti. azt, hogy nem látunk semmit. Ezért - mint magazinunk következő számaiban látni fogjuk - vannak egészen érdekes, jól használható programok, amelyek különböző VRML fájlokat állítanak elő, többnyire előre elkészített panelek felhasználásával.

Mi is bemutatunk egy magyar fejlesztésű VRML fájl szerkesztőt, amelyet az - eddigiek áttanulmányozása után - melegen ajánlunk az érdeklődők figyelmébe.

Ugyanitt talál az olvasó egy "képeskönyv"-et, amely amellett, hogy bemutat jó néhány VRML jelenetet, olyan csatolási pontokat is közöl, amelyeken keresztül alaposabban megismerkedhet az olvasó a virtuális valósággal, illetve az ezt leíró programnyelvvel.

Arra kérünk minden érdeklődőt, írja meg a nyelv megismerése során szerzett tapasztalatait, hívja fel figyelmünket a fenti leírásban talált esetleges hibákra, hiányosságokra. Nagy örömünkre szolgálna, ha az összegyűjtött tapasztalatok felhasználásával állandóan finomodhatna, bővülne ez a leírás.

Kérjük, írja meg észrevételeit:      szilassi@jgytf.u-szeged.hu

Minden érdeklődőnek az önálló felfedezés örömét, jó munkát kíván:

Szilassi Lajos

           Vissza a VRML nyitólapunkra