Hlavní navigace

Materiály a světelné zdroje ve VRML

Pavel Tišnovský

Většina fotografů vám řekne, že vedle kompozice celého snímku je důležité i správné osvětlení. Totéž platí pro trojrozměrné scény vytvářené na počítači. Aby vynikla prostorovost trojrozměrných scén, je nutné je správně nasvítit. Ve VRML je možné použít tři typy světel, které si dnes podrobně popíšeme.

Obsah

1. Materiály a světelné zdroje ve VRML
2. Typy světelných zdrojů a způsob výpočtu osvětlení
3. Bodový světelný zdroj
4. První demonstrační příklad: použití bodového světelného zdroje
5. Směrový světelný zdroj
6. Druhý demonstrační příklad: použití směrového světelného zdroje
7. Reflektorový světelný zdroj
8. Třetí demonstrační příklad: použití reflektoru jako zdroje světla

1. Materiály a světelné zdroje ve VRML

Při práci s formátem VRML je, podobně jako v mnoha dalších formátech i grafických knihovnách, barva objektů i výsledných pixelů na obrazovce reprezentovaná trojicí barvových složek. Frekvence těchto barvových složek byla vybrána tak, aby co nejvíce korespondovala s rozdílovými frekvencemi, na které jsou citlivé barvové senzory v lidském oku a současně aby bylo možné pouze pomocí těchto tří složek vyjádřit jakoukoli viditelnou barvu. Asi nebudete příliš překvapeni, když řeknu, že se jedná o červenou barvu (red), zelenou barvu (green) a barvu modrou (blue).

Vhodnou kombinací různých intenzit těchto tří barvových složek lze vytvořit téměř jakoukoli viditelnou barvu – to mimochodem hodně vypovídá o vlastnostech oka, které je při sledování počítačem generovaného obrazu „klamáno“ minimálně ve třech oblastech: používá se rastrový obraz místo kontinuálního popisu, barva je reprezentována směsicí tří frekvencí místo „kontinuální“ škály a celý obraz je periodicky obnovován s poměrně nízkou frekvencí, což nutně znamená, že při použití např. CRT technologie musí poblikávat. Způsob reprezentace barvy pomocí tří barevných složek R, G a B nazýváme barvový model RGB (RGB Color Model, RGB Color Space)).

Ve VRML se při definici vlastností materiálů, barvy světel i mozaiky textury používá právě barvový model RGB, kde jednotlivé barvové složky jsou reprezentovány číslem v pohyblivé řádové čárce o rozsahu 0,0–1,0. Celá trojice RGB je představována datovým typem SFColor. Je zajímavé, že při skriptování se tento datový typ chová jako objekt, u kterého lze načítat či naopak nastavovat jak jednotlivé barvové složky (nazvané r, g a b), tak provádět převody na řetězec (metoda toString()) či na barvový model HSV (metody setHSV() a getHSV()).

Díky použití hodnot v pohyblivé řádové čárce jsme tedy oproštěni od implementačních detailů konkrétní grafické karty, protože nám může být jedno, jestli je každá barvová složka uložena na jednom bytu, dvou bytech či například dvanácti bitech (ovšem moderní GPU se už oprostily od používání celočíselné aritmetiky a implementují nějakou z forem formátů s pohyblivou řádovou čárkou, čímž se mj. zvětšila dynamika reprezentovatelných hodnot). O způsobu definic materiálů těles jsme si základní informace řekli v předchozí části tohoto seriálu, dnes se podíváme především na způsob vytváření světel, které mnohdy tvoří důležitou součást celé 3D scény – pouze se správně zvoleným osvětlením získá scéna patřičnou hloubku.

Anketa

Zajima vas tema VRML?

2. Typy světelných zdrojů a způsob výpočtu osvětlení

Ve VRML se, podobně jako v grafické knihovně OpenGL, pro výpočet barvy objektů ve scéně používá takzvaný Phongův osvětlovací model. Tento model se snaží co nejvíce zjednodušit fyzikální a optické vlastnosti reálného světla tak, aby výpočty osvětlení byly rychlé a aby se výsledný obrázek dostatečně blížil realitě. V Phongově osvětlovacím modelu se světlo, které na určitý objekt dopadá a následně se od něj odráží, rozkládá na tři světelné složky.

První složkou je takzvaná ambientní složka (ambient). Tato složka vyjadřuje okolní světlo, které není přímo vyzařováno ze žádných světelných zdrojů. Toto světlo vzniká tak, že se paprsek jdoucí z nějakého zdroje několikrát odrazí (například od stěn v místnosti), a není tedy jasně patrný směr, odkud toto světlo přichází. V Phongově osvětlovacím modelu je toto světlo považováno za všesměrové, tj. osvětluje objekt ze všech směrů nezávisle na poloze a orientaci zdrojů světla. Ukázka tělesa osvětleného pouze ambientní složkou světla je zobrazena na prvním obrázku. Z tohoto obrázku je patrné, že nezávisle na 3D tvaru objektu se tento objekt jeví jako plošný, ztrácíme tedy prostorový vjem. S touto složkou světla jsme se již setkali při specifikaci vlastností materiálu – jednalo se o atribut ambientIntensity, stejný atribut je použitý i při definici zdrojů světla.

6501

Obrázek 1: Těleso, které odráží pouze ambientní složku světla

Druhou složkou světla je složka difúzní (diffuse). Tato světelná složka vyjadřuje světlo, které na povrch objektu dopadá z konkrétního bodového, směrového či reflektorového světelného zdroje a od povrchu objektu se odráží do všech směrů se stejnou intenzitou. Pomocí difúzní složky lze tedy vytvářet matné materiály (dřevo, pískovec, matná umělá hmota). V Phongově osvětlovacím modelu jsou výpočty difúzní složky světla upraveny tak, že výsledná barva difúzní složky je závislá pouze na vzájemné orientaci světelného zdroje a objektu. Poloha pozorovatele (kamery) nemá vliv na barvu ani intenzitu difúzní složky, čehož se dá využít například při urychlování vykreslovacích algoritmů. Ukázka tělesa, které je osvětlené pouze difúzní složkou světla, je zobrazena na druhém obrázku. I s tímto typem jsme se již ve VRML minule setkali – jednalo se o atribut materiálu nastavovaný pomocí diffuseColor.

6502

Obrázek 2: Těleso, které odráží pouze difúzní složku světla

Poslední světelnou složkou použitou v Phongově osvětlovacím modelu jsou odlesky (specular). Odlesky vznikají ve chvíli, kdy na povrch tělesa dopadá paprsek ze zdroje světla a tento paprsek se od povrchu odráží podle známého zákona o odrazu (to mj. znamená, že musíme znát normálu k povrchu, což je u základních geometrických objektů zaručeno). Ve skutečnosti se paprsek nikdy neodrazí ideálně, vždy nastává určité rozptýlení. Phongův osvětlovací model tento fenomén modeluje tak, že se stanoví koeficient změny intenzity odraženého světla podle úhlu odklonu počítaného odraženého paprsku od paprsku ideálně odraženého. Vektory těchto dvou paprsků se vynásobí a výsledek se umocní zadaným koeficientem. Ukázka tělesa se zobrazenými odlesky (resp. pouze s odlesky) je zobrazena na třetím obrázku. I tuto vlastnost materiálu již umíme nastavit pomocí atributů specularColor a shininess.

6503

Obrázek 3: Těleso, které odráží pouze odlesky

Při vykreslování reálných těles se téměř nikdy nepoužívá pouze jedna světelná složka, vždy se jedná o jejich vzájemnou kombinaci (to je ostatně patrné i z předchozích obrázků, z nichž ani jeden nevypadal přirozeně). Na dalších třech obrázcích jsou vykreslena tatáž tělesa (konkrétně světoznámá Newellova čajová konvice) osvětlená některou kombinací světelných složek. Na čtvrtém obrázku je kombinována ambientní a difúzní světelná složka, což je často používaná kombinace, protože výpočet obou světelných složek je poměrně rychlý (narozdíl od výpočtu odlesků, kde se musí provádět větší množství aritmetických operací – ovšem zdaleka ne všechny prohlížeče VRML automaticky vypínají výpočet odlesků, takže vynechání této složky je poněkud diskutabilní). Na pátém obrázku je kombinace ambientní složky s odlesky a na šestém obrázku jsou použity všechny tři světelné složky. Tento obrázek se také nejvíce blíží realitě.

6504

Obrázek 4: Těleso osvětlené ambientní a difúzní složkou světla

6505

Obrázek 5: Těleso osvětlené ambientní složkou světla s odlesky

6506

Obrázek 6: Těleso osvětlené difúzní složkou světla s odlesky

6507

Obrázek 7: Těleso osvětlené ambientní i difúzní složkou světla s odlesky

Ve VRML je možné použít tři typy světel. Jedná se o bodový světelný zdroj, který se podobá idealizované kulaté žárovce, směrový světelný zdroj, který odpovídá slunečnímu záření (to k nám přichází z takové dálky, že se paprsky zdají být rovnoběžné) a nakonec světelný zdroj, který se snaží napodobit reflektor. V jedné scéně je možné použít více světel z nichž každé může být různého typu či mít nastaveny odlišné vlastnosti. Světla je možné ovládat programově pomocí skriptů či je zapínat a vypínat přes takzvané senzory.

Při práci s více světly je důležité si uvědomit, že větší množství povolených (tj. definovaných) světel může znatelně zpomalovat vykreslování celé scény. Je to způsobeno faktem, že především starší grafické akcelerátory nepodporovaly výpočty osvětlení, a tak se osvětlení počítalo programově s  využitím výpočetního výkonu hlavního procesoru. Vzhledem k tomu, že výpočetní náročnost výpočtu osvětlení lineárně roste s počtem zapnutých světel, může větší počet světel zatížit hlavní procesor, který pak nestačí dodávat data grafickému akcelerátoru. Moderní grafické akcelerátory, které obsahují GPU, již podporují výpočet osvětlení přímo na grafické kartě, takže se výkon hlavního procesoru dá využít na důležitější věci (například odstranění neviditelných částí scén). Ovšem i tehdy může větší počet světel rendering scény zpomalit.

3. Bodový světelný zdroj

Nejjednodušší (alespoň pro pochopení, programová implementace je poměrně složitá) je bodové světlo. Toto světlo si můžeme představit například jako idealizovanou žárovku umístěnou v prostoru, která vyzařuje světlo na všechny strany se stejnou intenzitou. Ve VRML se tento typ světla nastavuje uzlem nazvaným příhodně PointLight, který může mít následující atributy:

Atribut Význam atributu
location umístění světla (vektor)
on zapnutí či vypnutí světla (booleovská hodnota)
color barva světla
intensity intenzita difúzní složky 0..1
ambientIntensity intenzita ambientní složky 0..1
attenuation dosvit vyjádřený trojicí hodnot
radius maximální dosvit zadaný v metrech

Bodové světlo je umístěno v prostoru a svítí stejnou intenzitou do všech stran, ovšem pouze do vzdálenosti definované atributem radius. Míra poklesu osvětlení je dána trojicí hodnot předávaných v atributu attenuation. Dosvit je vypočten podle vzorce: 1 / (attenuation[0] + attenuation[1]×r + attenuation[2]×r2), kde r je vzdálenost plošky objektu od zdroje světla.

4. První demonstrační příklad: použití bodového světelného zdroje

V prvním demonstračním příkladu je ukázáno použití bodového světelného zdroje. Nejprve je v uzlu NavigationInfo vypnuto automatické světlo, které se pohybuje současně s pozorovatelem (headlight). To by nás zbytečně mátlo. Potom je vytvořen světelný zdroj na souřadnicích [2, –2, 0] a vzdáleností dosvitu 16 metrů. Úbytek světla není nastaven (1/1=1), proto se jeho intenzita se vzdáleností nemění. Ambientní složka světla, která ovlivňuje způsob zobrazení částí povrchu odkloněných od zdroje, je nastavena na 60%.

6508

Obrázek 8: Screenshot prvního demonstračního příkladu

#VRML V2.0 utf8
# verze 2.0 vyzaduje kodovani UTF-8

# ---------------------------------------------------------
# Prvni demonstracni priklad trojrozmerne sceny
# popsane jazykem VRML 2.0
# Priklad je soucasti serialu "Graficke formaty"
# (/serialy/graficke-formaty/)
# vychazejiciho na Root.cz (http://www.root.cz)
#
# Zmena materialu povrchu a nastaveni bodoveho osvetleni
# ---------------------------------------------------------

# metainformace o trojrozmerne scene jako celku
# (mohou ji pouzit jak prohlizece, tak i indexovaci roboti)

WorldInfo {
    title "Prvni 3D scena s nekolika objekty a bodovym svetelnym zdrojem"
    info ["Autor: Pavel Tisnovsky, 2007"
         "sireno pod licenci GPL "
         "(zde mohou byt dalsi texty"]
}


# dulezite: musime vypnout automaticky svetelny zdroj
NavigationInfo {
   headlight FALSE
}



# bodovy svetelny zdroj
PointLight {
    color 1.0 1.0 1.0     # barva svetla
    intensity 1.0         # intenzita bodoveho svetla
    ambientIntensity 0.6  # intenzita vsesmeroveho svetla
    location 2 -2 0       # pozice svetelneho zdroje
    radius 16             # polomer dosvitu
    attenuation 1 0 0     # ubytek svetla (dosvit):
                          # 1 / (attenuation[0] + attenuation[1]*r + attenuation[2]*r2)
}



# prvni objekt vytvoreny z difuzniho "plastu"
Transform {
    translation -2 0 0
        children [
        # vytvoreni jednoducheho objektu (koule)
        # s puvodnim nastavenim vsech parametru
        Shape {
            # vzhled objektu - negeometricke informace
            appearance Appearance {
                # material zcela bez lesku
                material Material {
                    diffuseColor  0.0 0.5 1.0
                    specularColor 0.0 0.0 0.0
                }
            }
            # tvar objektu - geometricke informace
            geometry Sphere {
            }
        }
    ]
}



# druhy objekt pouziva material s odlesky
Transform {
    translation 0 0 0
        children [
        # vytvoreni jednoducheho objektu (koule)
        # s puvodnim nastavenim vsech parametru
        Shape {
            # vzhled objektu - negeometricke informace
            appearance Appearance {
                # odlesky jsou ciste bile (typicka hodnota)
                material Material {
                    diffuseColor  0.0 0.5 1.0
                    specularColor 1.0 1.0 1.0
                }
            }
            # tvar objektu - geometricke informace
            geometry Sphere {
            }
        }
    ]
}



# treti objekt pouziva material s odlesky se zmenenou odrazivosti
Transform {
    translation 2 0 0
        children [
        # vytvoreni jednoducheho objektu (koule)
        # s puvodnim nastavenim vsech parametru
        Shape {
            # vzhled objektu - negeometricke informace
            appearance Appearance {
                # odlesky jsou ciste bile (typicka hodnota)
                # zmena odrazivosti objektu (0.0-1.0)
                material Material {
                    diffuseColor  0.0 0.5 1.0
                    specularColor 1.0 1.0 1.0
                    shininess 0.8
                }
            }
            # tvar objektu - geometricke informace
            geometry Sphere {
            }
        }
    ]
}



# ctvrty objekt je polopruhledny
Transform {
    translation 0 -2 0
        children [
        # vytvoreni jednoducheho objektu (koule)
        # s puvodnim nastavenim vsech parametru
        Shape {
            # vzhled objektu - negeometricke informace
            appearance Appearance {
                # odlesky jsou ciste bile (typicka hodnota)
                # zmena pruhlednosti objektu
                material Material {
                    diffuseColor  1.0 0.0 0.5
                    specularColor 1.0 1.0 1.0
                    transparency 0.5
                }
            }
            # tvar objektu - geometricke informace
            geometry Sphere {
            }
        }
    ]
}

# ---------------------------------------------------------
# finito
# --------------------------------------------------------- 
6509

Obrázek 9: Druhý screenshot prvního demonstračního příkladu

5. Směrový světelný zdroj

Směrový světelný zdroj, kterým je možné simulovat například sluneční záření, je kupodivu výpočetně jednodušší, než bodový světelný zdroj. Také jeho specifikace je snadnější, neboť tento světelný zdroj nemá definován žádný útlum ani maximální vzdálenost dosvitu. Na rozdíl od bodového zdroje se nespecifikuje pozice samotného světla, ale pouze směr paprsků, které jsou považovány za rovnoběžné a nemají žádný útlum. Mezi možné atributy, které lze nastavit, patří:

Atribut Význam atributu
on zapnutí či vypnutí světla (booleovská hodnota)
color barva světla
intensity intenzita difúzní složky 0..1
ambientIntensity intenzita ambientní složky 0..1
direction směr osvětlení zadaný vektorem

6. Druhý demonstrační příklad: použití směrového světelného zdroje

Ve druhém demonstračním příkladu je poměrně přímočarým způsobem ukázáno, jak se používá směrový zdroj světla. Samotné parametry světla, tj. barva, intenzita difúzní složky i intenzita ambientní složky, zůstávají nastavené na stejnou hodnotu. Směr paprsků je kolmo dolů pomocí vektoru (0, 0, –1), což je současně poslední parametr směrového světelného zdroje. Do scény je navíc oproti prvnímu modelu přidaná i šedá plocha, kterou je možné odstranit zakomentováním všech řádků s definicí posledního objektu.

6510

Obrázek 10: Screenshot druhého demonstračního příkladu

#VRML V2.0 utf8
# verze 2.0 vyzaduje kodovani UTF-8

# ---------------------------------------------------------
# Druhy demonstracni priklad trojrozmerne sceny
# popsane jazykem VRML 2.0
# Priklad je soucasti serialu "Graficke formaty"
# (/serialy/graficke-formaty/)
# vychazejiciho na Root.cz (http://www.root.cz)
#
# Zmena materialu povrchu a nastaveni smeroveho osvetleni
# ---------------------------------------------------------

# metainformace o trojrozmerne scene jako celku
# (mohou ji pouzit jak prohlizece, tak i indexovaci roboti)

WorldInfo {
    title "Druha 3D scena s nekolika objekty a smerovym svetelnym zdrojem"
    info ["Autor: Pavel Tisnovsky, 2007"
         "sireno pod licenci GPL "
         "(zde mohou byt dalsi texty"]
}


# dulezite: musime vypnout automaticky svetelny zdroj
NavigationInfo {
   headlight FALSE
}



# smerovy svetelny zdroj
DirectionalLight {
    color 1.0 1.0 1.0     # barva svetla
    intensity 1.0         # intenzita smeroveho svetla
    ambientIntensity 0.6  # intenzita vsesmeroveho svetla
    direction 0 0 -1      # smer osvetleni
}



# prvni objekt vytvoreny z difuzniho "plastu"
Transform {
    translation -2 0 0
        children [
        # vytvoreni jednoducheho objektu (koule)
        # s puvodnim nastavenim vsech parametru
        Shape {
            # vzhled objektu - negeometricke informace
            appearance Appearance {
                # material zcela bez lesku
                material Material {
                    diffuseColor  0.0 0.5 1.0
                    specularColor 0.0 0.0 0.0
                }
            }
            # tvar objektu - geometricke informace
            geometry Sphere {
            }
        }
    ]
}



# druhy objekt pouziva material s odlesky
Transform {
    translation 0 0 0
        children [
        # vytvoreni jednoducheho objektu (koule)
        # s puvodnim nastavenim vsech parametru
        Shape {
            # vzhled objektu - negeometricke informace
            appearance Appearance {
                # odlesky jsou ciste bile (typicka hodnota)
                material Material {
                    diffuseColor  0.0 0.5 1.0
                    specularColor 1.0 1.0 1.0
                }
            }
            # tvar objektu - geometricke informace
            geometry Sphere {
            }
        }
    ]
}



# treti objekt pouziva material s odlesky se zmenenou odrazivosti
Transform {
    translation 2 0 0
        children [
        # vytvoreni jednoducheho objektu (koule)
        # s puvodnim nastavenim vsech parametru
        Shape {
            # vzhled objektu - negeometricke informace
            appearance Appearance {
                # odlesky jsou ciste bile (typicka hodnota)
                # zmena odrazivosti objektu (0.0-1.0)
                material Material {
                    diffuseColor  0.0 0.5 1.0
                    specularColor 1.0 1.0 1.0
                    shininess 0.8
                }
            }
            # tvar objektu - geometricke informace
            geometry Sphere {
            }
        }
    ]
}



# ctvrty objekt je polopruhledny
Transform {
    translation 0 -2 0
        children [
        # vytvoreni jednoducheho objektu (koule)
        # s puvodnim nastavenim vsech parametru
        Shape {
            # vzhled objektu - negeometricke informace
            appearance Appearance {
                # odlesky jsou ciste bile (typicka hodnota)
                # zmena pruhlednosti objektu
                material Material {
                    diffuseColor  1.0 0.0 0.5
                    specularColor 1.0 1.0 1.0
                    transparency 0.5
                }
            }
            # tvar objektu - geometricke informace
            geometry Sphere {
            }
        }
    ]
}


# paty doplnkovy objekt - seda plocha (je mozne "zapoznamkovat")
Transform {
    scale 6 6 0.5
    translation 0 0 -2
        children [
        Shape {
            # vzhled objektu - negeometricke informace
            appearance Appearance {
                # odlesky jsou ciste bile (typicka hodnota)
                # zmena pruhlednosti objektu
                material Material {
                    diffuseColor  0.6 0.6 0.6
                    specularColor 1.0 1.0 1.0
                    shininess 0.8
                }
            }
            # tvar objektu - geometricke informace
            geometry Box {
            }
        }
    ]
}
# ---------------------------------------------------------
# finito
# --------------------------------------------------------- 
6511

Obrázek 11: Další screenshot druhého demonstračního příkladu

6512

Obrázek 12: Screenshot druhého demonstračního příkladu po přidání podložky

7. Reflektorový světelný zdroj

Výpočetně nejnáročnější je reflektorový světelný zdroj. U tohoto zdroje je možné zadávat velké množství parametrů. Kromě již známých koeficientů, jakými jsou barva světla a jeho intenzity, se nastavují parametry vlastního světelného kužele. Mezi tyto parametry patří vrcholový úhel kužele, ve kterém má světlo nejvyšší (konstantní) intenzitu, vrcholový úhel většího kužele, kde intenzita směrem k jeho okraji postupně klesá, maximální dosvit a také tři složky, kterými je specifikován pokles dosvitu (podobně jako u bodového zdroje světla). Tento světelný zdroj je tedy jakousi kombinací bodového a směrového zdroje, ke kterým přidává další unikátní vlastnosti (atributy).

Atribut Význam atributu
location umístění světla (třísložkový vektor)
direction směr osvětlení zadaný vektorem
on zapnutí či vypnutí světla (booleovská hodnota)
color barva světla
intensity intenzita difúzní složky 0..1
ambientIntensity intenzita ambientní složky 0..1
attenuation dosvit vyjádřený trojicí hodnot
radius maximální dosvit zadaný v metrech
cutOffAngle vrcholový úhel světelného kužele (fyzické omezení reflektoru)
beamWidth vrcholový úhel kužele, ve kterém má světlo konstantní maximální intenzitu

8. Třetí demonstrační příklad: použití reflektoru jako zdroje světla

Ve třetím demonstračním příkladu je ukázána definice reflektorového zdroje světla, přičemž pro jednoduchost nejsou zadány všechny jeho atributy. Samotný prohlížeč VRML souborů si totiž za nezadané atributy dosadí hodnoty specifikované normou. Také je ukázáno, jak lze vytvořit několik objektů se stejnými vlastnostmi pomocí příkazů DEF a USE. Všimněte si, že dva nejkrajnější objekty leží těsně POD světelným zdrojem, takže nejsou plně osvětleny.

6513

Obrázek 13: Screenshot třetího demonstračního příkladu

#VRML V2.0 utf8
# verze 2.0 vyzaduje kodovani UTF-8

# ---------------------------------------------------------
# Treti demonstracni priklad trojrozmerne sceny
# popsane jazykem VRML 2.0
# Priklad je soucasti serialu "Graficke formaty"
# (/serialy/graficke-formaty/)
# vychazejiciho na Root.cz (http://www.root.cz)
#
# Zmena materialu povrchu a nastaveni smeroveho osvetleni
# ---------------------------------------------------------

# metainformace o trojrozmerne scene jako celku
# (mohou ji pouzit jak prohlizece, tak i indexovaci roboti)

WorldInfo {
    title "Treti 3D scena s nekolika objekty a reflektorovym svetelnym zdrojem"
    info ["Autor: Pavel Tisnovsky, 2007"
         "sireno pod licenci GPL "
         "(zde mohou byt dalsi texty"]
}


# dulezite: musime vypnout automaticky svetelny zdroj
NavigationInfo {
   headlight FALSE
}



# reflektorovy svetelny zdroj
SpotLight {
    color 1.0 1.0 1.0     # barva svetla
    intensity 1.0         # intenzita reflektoroveho svetla
    ambientIntensity 0.6  # intenzita vsesmeroveho svetla
    location 0 -4 5       # stred reflektoru
    direction 0 1 -1      # smer natoceni reflektoru
    beamWidth 1.0         # sirka kuzele tvoreneho paprsky o nejvetsi intenzite
    radius 2              # dosah osvetleni zadany v metrech
}



# skupina stejnych objektu
Group {
    children [
        Transform {
             translation 0 -3 0
                 children [
                 # vytvoreni jednoducheho objektu (koule)
                 # s puvodnim nastavenim vsech parametru
                 DEF SPHERE Shape {
                     # vzhled objektu - negeometricke informace
                     appearance Appearance {
                         # odlesky jsou ciste bile (typicka hodnota)
                         material Material {
                             diffuseColor  0.0 0.5 1.0
                                 specularColor 1.0 1.0 1.0
                         }
                     }
                     # tvar objektu - geometricke informace
                     geometry Sphere {
                     }
                 }
             ]
         }
         Transform {
            translation 0 -1 0
            children [
               USE SPHERE
            ]
         }
         Transform {
            translation 0 1 0
            children [
               USE SPHERE
            ]
         }
         Transform {
            translation 0 3 0
            children [
               USE SPHERE
            ]
         }
         Transform {
            translation 2 -4 0
            children [
               USE SPHERE
            ]
         }
         Transform {
            translation 2 -2 0
            children [
               USE SPHERE
            ]
         }
         Transform {
            translation 2 0 0
            children [
               USE SPHERE
            ]
         }
         Transform {
            translation 2 2 0
            children [
               USE SPHERE
            ]
         }
         Transform {
            translation 2 4 0
            children [
               USE SPHERE
            ]
         }
         Transform {
            translation -2 -4 0
            children [
               USE SPHERE
            ]
         }
         Transform {
            translation -2 -2 0
            children [
               USE SPHERE
            ]
         }
         Transform {
            translation -2 0 0
            children [
               USE SPHERE
            ]
         }
         Transform {
            translation -2 2 0
            children [
               USE SPHERE
            ]
         }
         Transform {
            translation -2 4 0
            children [
               USE SPHERE
            ]
         }
     ]
}



# paty doplnkovy objekt - seda plocha (je pozne "zapoznamkovat")
Transform {
    scale 6 6 0.5
    translation 0 0 -2
        children [
        # vytvoreni jednoducheho objektu (koule)
        # s puvodnim nastavenim vsech parametru
        Shape {
            # vzhled objektu - negeometricke informace
            appearance Appearance {
                # odlesky jsou ciste bile (typicka hodnota)
                # zmena pruhlednosti objektu
                material Material {
                    diffuseColor  0.7 0.7 0.7
                    specularColor 1.0 1.0 1.0
                    shininess 0.8
                }
            }
            # tvar objektu - geometricke informace
            geometry Box {
            }
        }
    ]
}

# ---------------------------------------------------------
# finito
# --------------------------------------------------------- 
6514

Obrázek 14: Další screenshot třetího demonstračního příkladu

Našli jste v článku chybu?

23. 12. 2008 11:25

kelibor (neregistrovaný)
Prosim poraďte,
potřebuju v jazyce vrml stíny, vím že jsem se dočetl, že to jazyk vrml neumí nebo s tim jsou problémy, ale zdá se mi nesmysl, že by to vůbec nešlo. Nejde mi o stíny samotné, ale je hloupé, když mám vymodelovaný byt ve virtuální realitě a světlo v místnoti osvětluje i místnost druhou. Nemáte nějaké řešení? Díky

30. 11. 2007 9:58

ufak (neregistrovaný)
Taky nechapu, jak to muzete stihat. A jeste vydavat nekolik serii clanku soubezne.
Precet jsem si prvni o pixelartu a mam dojem, ze byl dobre pripraveny a zabralo to dost casu, ne? Ale byl fakt prima.
Vitalia.cz: Taky věříte na pravidlo 5 sekund?

Taky věříte na pravidlo 5 sekund?

Podnikatel.cz: Změny v cestovních náhradách 2017

Změny v cestovních náhradách 2017

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

DigiZone.cz: TV Philips a Android verze 6.0

TV Philips a Android verze 6.0

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

120na80.cz: Co všechno ovlivňuje ženskou plodnost?

Co všechno ovlivňuje ženskou plodnost?

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Měšec.cz: mBank cenzuruje, zrušila mFórum

mBank cenzuruje, zrušila mFórum

120na80.cz: Horní cesty dýchací. Zkuste fytofarmaka

Horní cesty dýchací. Zkuste fytofarmaka

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Vitalia.cz: Když přijdete o oko, přijdete na rok o řidičák

Když přijdete o oko, přijdete na rok o řidičák

Vitalia.cz: Pamlsková vyhláška bude platit jen na základkách

Pamlsková vyhláška bude platit jen na základkách

Vitalia.cz: Potvrzeno: Pobyt v lese je skvělý na imunitu

Potvrzeno: Pobyt v lese je skvělý na imunitu

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu

120na80.cz: Na ucho teplý, nebo studený obklad?

Na ucho teplý, nebo studený obklad?

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

Podnikatel.cz: Snížení DPH na 15 % se netýká všech

Snížení DPH na 15 % se netýká všech