Pre model snehuliaka je vytvorený všeobecný prototyp SNOWMAN
s interfacom
PROTO SNOWMAN [ field SFInt32 tex 1 # textures ON/OFF field SFInt32 det 1 # details ON/OFF field SFInt32 sph 1 # spheres/boxes ] {...}ktorý umožňuje jednotlivými prepínačmi nezávisle zapnúť/vypnúť (1/0) textúry, malé detaily a použitie gúľ/kvádrov. Ten je využívaný prototypom SNOWMALE, ktorý má navyše špecifické doplnky (činky, hrniec) a umožňuje nastaviť farbu a textúru hrnca. Snehuliak má 5 úrovní detailu: plný, potom zmiznú textúry, potom aj detaily, potom sa oblé primitívy zmenia na kvádre a nakoniec jediný snehový kváder, ktorý pri ešte väčšej vzdialenosti zmizne. Jednotlivé úrovne detailu sú samostatnými prototypmi
full
, medium
,
draft
, boxed
a onebox
určujúcimi
príslušné nastavenia prepínačov, napr.
PROTO full [ exposedField SFColor pot_color .1 .15 .5 exposedField MFString pot_texture "granitetex.png" ] { SNOWMALE { tex 1, det 1, sph 1, pot_color IS pot_color, pot_texture IS pot_texture } } PROTO medium [ exposedField SFColor pot_color .1 .15 .5 ] { SNOWMALE { tex 0, det 1, sph 1, pot_color IS pot_color } } PROTO draft [ exposedField SFColor pot_color .1 .15 .5 ] { SNOWMALE { tex 0, det 0, sph 1, pot_color IS pot_color } } ...atď. Tieto implementačné záležitosti sú skryté v pomocnom súbore
snowman_proto.wrl
. Aplikačný súbor snowman.wrl
definujúci časť sveta so snehuliakmi má k dispozícii len jednotlivé úrovne
modelu ako
EXTERNPROTO FullSnowman [ exposedField SFColor pot_color exposedField MFString pot_texture ] "snowman_proto.wrl#full" ...atď. a sám určí v akých vzdialenostiach sa tieto úrovne použijú pomocou
range[...]
(alebo nastaví vždy plný model ak
lod=0
) v konečnom prototype snehuliaka
PROTO Snowman [ field SFInt32 lod 1 exposedField SFColor pot_color .1 .15 .5 exposedField MFString pot_texture "granitetex.png" ] { Switch { whichChoice IS lod choice [ FullSnowman { pot_color IS pot_color, pot_texture IS pot_texture } LOD { level [ FullSnowman { pot_color IS pot_color, pot_texture IS pot_texture } MediumSnowman { pot_color IS pot_color } DraftSnowman { pot_color IS pot_color } BoxedSnowman { pot_color IS pot_color } SnowBox {} Group {} ] range [ 10 20 40 70 110 ] } ] } }