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 ]
}
]
}
}