|
||||||
ROBOTICA
video
immagini
papers
progettati
costruiti
toolbox
vrml
simulatori
Modificare il livello di dettaglio del mondo : il nodo LOD |
Quando abbiamo degli oggetti
molto complessi formati da migliaia di poligoni potremmo avere qualche rallentamento
in fase di rendering. Lo stesso accade quando vogliamo ricoprire molte superfici
con delle textures. E’ anche vero però che tutto questo livello di dettaglio
non sempre risulta essere necessario. In particolare, vorremmo avere il massimo
dettaglio quando siamo vicini ad un oggetto ; quando invece siamo in lontananza,
non siamo in grado di apprezzare tutte le particolarità dell’oggetto.
Per tenere conto di questo
fatto possiamo introdurre il nodo LOD (Level Of Detail). Con il nodo LOD possiamo
specificare dei ranges di distanza nei quali il nostro oggetto viene renderizzato
in maniera diversa.
Consideriamo il seguente
esempio.
esempio di utilizzo del nodo LOD
L’esempio qui riportato
funziona in maniera corretta in Cosmo Player, mentre non sortisce alcun effetto
in Live3d (dove si disegnano entrambi i nodi Shape contenuti nel nodo LOD).
La ragione al momento non mi è nota (provvederò a modificare la versione in
linea di questo testo non appena avrò altre informazioni).
In ogni caso, il risultato
di questo breve sorgente vrml (almeno in Cosmo Player) è quello di avere una
sfera con texture quando l’utente è a distanza inferiore ai 7 metri, mentre
ho una sfera senza texture quando la distanza dell’utente è superiore ai 7
metri. Si possono definire più livelli di dettaglio ; basta indicare diversi
livelli all’interno del field range. I vari nodi da utilizzare per i livelli
sono contenuti nel campo level. Il primo nodo indicato è quello che si riferisce
al primo livello, quello cioè dove l’osservatore è più vicino all’oggetto.
#VRML V2.0 utf8
# semplice esempio di utilizzo del nodo LOD
LOD {
range [ 7 ]
level [
Shape {
appearance Appearance {
material Material { emissiveColor 0 0 1 }
texture ImageTexture { url "marble.jpg" }
}
geometry Sphere { radius 2 }
}
Shape {
appearance Appearance {
material Material { emissiveColor 0 0 1}
}
geometry Sphere { radius 2 }
}
]
}