3    Možnosti zobrazení map pomocí VRML

Jak již bylo zmíněno v předchozí kapitole, základními stavebními kameny modelu terénu ve VRML jsou uzly ElevationGrid (Výšková mapa) nebo IndexedFaceSet (Množina ploch).

3.1   Uzel IndexedFaceSet

Tvoří model známý jako polyedrický model terénu, který je tvořen rovinnými ploškami trojúhelníkového tvaru s tím, že uzel IndexedFaceSet dovoluje tvořit nejen trojúhelníky, ale i obecnější n-úhelníky, které mohou, ale nemusí být rovinné. Každá plocha z množiny je definována zapsáním pořadových čísel vrcholů. Jestliže je jeden vrchol sdílen více plochami, stačí ho zapsat jen jednou a zapamatovat si jeho pořadí v seznamu vrcholů. Plochy se potom zadávají v parametru coordIndex jako indexy prostorových souřadnic v parametru texCoord zakončené „-1“. Pořadí vrcholů v parametru coordIndex se zadává proti směru hodinových ručiček, čímž se definuje orientace ploch. Ta hraje roli při zobrazení plochy, protože plocha je implicitně chápána jako jednostranná.

Dalším důležitým krokem při zobrazení modelu je nanášení textury na jeho povrch. Jelikož implicitní nanesení textury mapy na povrch terénu není správné, je nutné, aby byl definován parametr texCoord, ve kterém se definuje uzel TextureCoordinate se seznamem souřadnic. Tyto rovinné souřadnice vztažené k nanášené bitmapě potom odpovídají prostorovým souřadnicím modelu. Jestliže pořadí bodů uvedených v uzlu TextureCoordinate odpovídá pořadí bodů modelu uvedenému v uzlu Coordinate, není potřeba definovat posloupnost v parametru texCoordIndex (který má obdobnou strukturu jako parametr coordIndex).

Zajímavý parametr, který je výhodné použít, je parametr creaseAngle. Je to úhel sevřený mezi dvěma sousedními plochami, který určuje ostrou hranu nebo naopak hladké napojení těchto ploch. Jestliže definujeme tento úhel, model pak vypadá daleko realističtěji.

Většinu dalších parametrů v uzlu IndexedFaceSet (jako např.: color, normal, ccw, colorIndex, colorPerVertex, convex, normalIndex, normalPerVertex, solid) není třeba pro tvorbu modelů terénu definovat.

Obr. 3.1 Model vytvořený uzlem IndexedFaceSet.

3.2   Uzel ElevationGrid

Tento uzel je speciálně definován pro tvorbu krajiny ve VRML. Vytváří model, známý jako rastrový model terénu, definovaný pomocí pravoúhlé sítě vrcholů s příslušnými výškami. Mapa je umístěna do roviny XZ. Počet vrcholů sítě je definován v parametrech xDimension a zDimension. Vzdálenost vrcholů v ose X a Z se definuje v parametrech xSpacing a zSpacing. Seznam výšek, reprezentující souřadnice Y v jednotlivých vrcholech sítě, je zapsán v parametru height. Tento seznam je uspořádán po řádcích. V jednom řádku je proto tolik hodnot, kolik udává hodnota zadaná v parametru xDimension. řádky se zapisují postupně ve směru osy Z.

Nanášení textury na výškovou mapu je mnohem jednodušší než u množiny ploch. Před nanášením textury je pouze nutné texturu svisle převrátit. Tato úprava je důležitá kvůli způsobu zadávání bodů výškové mapy a kvůli umístění počátečního bodu textury do levého horního bodu, zatímco vztažný bod obrázku je ve skutečnosti v levém dolním rohu. To lze udělat buï převrácením připraveného obrázku, anebo jednodušeji pomocí transformace textury v uzlu TextureTransform nastavením parametru scale 1 -1.

Obr. 3.2 Model vytvořený uzlem ElevationGrid.

3.3   Výhody a nevýhody jednotlivých typů modelů

Na závěr této kapitoly bych chtěl shrnout hlavní výhody a nevýhody zobrazení modelů terénu těmito uzly.

Pomocí uzlu IndexedFaceSet lze zobrazit mapu jakéhokoli tvaru. Pomocí uzlu ElevationGrid lze zobrazit pouze mapu tvaru obdélníkového.

Uzel IndexedFaceSet může zobrazit jakýkoli tvar plochy, např. převis, což u uzlu ElevationGrid nelze.

Uzel ElevationGrid používá pro popis jak složitějšího, tak jednoduchého terénu stejné množství dat. Velikost souboru popisujícího členitější terén bude stejná jako velikost souboru popisujícího rovinu.

Uzel ElevationGrid má jednodušší nanášení textury - nemusí se definovat souřadnice textury. V uzlu IndexedFaceSet se musí vždy definovat souřadnice textury pro správné nanesení mapy na model.

Model tvořený uzlem ElevationGrid se snadněji generalizuje.

Obr.3.3 Model bez parametru creaseAngle (nahoře). Model s nastavením parametru creaseAngle na úhel 2 rad (dole).

3.4   Iluze prostoru

3.4.1  Světlo

Aby byl prostorový model vůbec vidět, je třeba ve virtuálním světe definovat nějaké světlo. VRML má definováno několik druhů světla. Přehled je uveden v tabulce

uzel

popis

NavigationInfo

čelní svítilna avatara

DirectionalLight

zdroj rovnoběžných paprsků

PointLight

bodový zdroj

SpotLight

reflektor, směrový zdroj

Pro vytvoření iluze virtuální krajiny však stačí jeden bodový zdroj světla, který nám nahradí slunce. Z tohoto důvodu se nebudeme zabývat zbývajícími druhy světel. Počet světel ve virtuálním světě není omezen, ale je zbytečné nebo spíše škodlivé definovat světel více, protože bychom mohli ztratit velice pěkné stínování krajiny.

Zdroj světla je definován polohou (location), dosahem paprsků (radius) a barvou paprsků (color) o dané intenzitě (intensity). Světelný zdroj můžeme vypnout (of) nebo zapnout (on) a lze zadat, do jaké míry přispívá k celkovému projasnění celého virtuálního světa (ambientIntensity). Čím jasnější je svět, tím jsou jasnější plochy odvrácené od zdrojů světla.

Zdroj světla ve virtuálním světě není vidět. Jestliže chceme ve virtuálním světě vidět „virtuální sluníčko“, musíme ho definovat např. jako zářící kouli. Jinou důležitou vlastností světelného zdroje ve virtuální realitě je, že žádný objekt nemůže zastavit světelný paprsek na jeho dráze a zaclonit tak objekt jiný. V praxi to pak vypadá tak, že tělesa nevrhají stíny.

3.4.2  Pozadí

Další vlastnost, která dodá virtuální krajině větší reálnost, je pozadí (uzel Background). VRML poskytuje několik možností, jak definovat pozadí. Nejjednodušší možnost je vyplnit pozadí jedinou barvou, tato možnost ale není vhodná pro zobrazení krajiny. Lepší je možnost použít škálu barev měnících se s výškou nad horizontem.

Mezi základní vlastnosti pozadí patří to, že je vykreslováno bez ohledu na světelné zdroje, mlhu či dohled avatara. Pozadí je samostatný prvek, který je vykreslen jako první, a poté jsou před něj umisovány virtuální objekty. K pozadí se nemůžeme přiblížit. Můžeme si ho představit jako těleso, které obklopuje celý virtuální svět, kde se avatar vždy nachází uprostřed.

Uzel Background definuje dvě tělesa, která mohou obklopovat virtuální svět – kouli a krychli. Každé těleso má jiné využití. Koule se používá pro jednodušší pozadí, na kterém pouze přecházejí barevné odstíny ve vodorovných pruzích. Krychle se používá jako podklad pro panoramatické obrázky.

3.4.2.1 Pozadí v podobě koule

U koule se rozlišuje obloha (sky) a zem (ground). Zem nemusí být definována, obloha potom pokrývá celou kouli, což může vypadat jako vesmírný prostor. Je-li definována i zem, překryje její barva dolní polokouli oblohy.

Barevné přechody se zadávají jako posloupnost barev v parametru skyColor, resp. groundColor a ke každé barvě je definován úhel v parametru skyAngle, resp. groundAngle. Úhly jsou odměřovány pro oblohu od nadhlavníku v intervalu 0 – π a pro zem od nadiru v intervalu 0 – π/2. Počet barev musí být vždy o jednu vyšší než počet úhlů, nebo první barva v seznamu se použije pro nadhlavník, resp. nadir, tj. pro úhel rovný nule.

Obr. 3.4 Pozadí v podobě koule.

3.4.2.2 Pozadí v podobě krychle

Daleko lepšího vzhledu docílíme použitím panoramatických obrázků nalepených na pomyslné krychli. Problém je získat kvalitní panoramatické obrázky, které na sebe navazují. Ještě větším problémem, než návaznost obrázků na sebe, je při zobrazení krajiny rozumná návaznost obrázku na model. Nejde totiž o přímou návaznost, obrázky v tomto případě dokreslují horizont, a je proto třeba, aby tomuto faktu odpovídaly.

Obr. 3.5 Pozadí v podobě krychle.

3.4.2.3 Kombinace obou druhů pozadí

Poslední možností je kombinovat oba druhy pozadí. V tomto případě je krychle vepsána do koule. Smysl spočívá v tom, že můžeme vynechat některé části krychle, např. horní a dolní stěnu. Místo vynechaných stěn bude vidět pozadí definované na kouli.

Další možností je použití poloprůhledných obrázků, jimiž prosvítají barvy pozadí na kouli.

3.4.3  Mlha

Pro dokreslení iluze lze ve virtuálním světě definovat mlhu (uzel Fog). Má tři parametry, a to barvu, způsob houstnutí a vzdálenost, za kterou již objekty v mlze nejsou vidět. Mlha se ve virtuálním světě projeví smícháním s barvou objektů. Množství původní barvy, kterou si objekt uchová, závisí na vzdálenosti. U avatara mají objekty pouze svou barvu, dále od avatara se původní barva čím dál tím více mísí s barvou mlhy.

Při současném použití pozadí a mlhy je vhodné barvu pozadí nastavit v oblasti horizontu na barvu mlhy. Další barva nad horizontem pak jakoby vystupuje z mlhy.

Obr. 3.6 Krajina v mlze.