XML  »  Guide  »  Guida VRML 

Introduzione delle luci



A questo punto si dovrebbe essere in grado di cominciare a costruire oggetti di qualunque forma, ma negli esempi visti sinora non si è ancora presa in considerazione la gestione delle luci. Come già accennato in precedenza, il modo in cui le luci vengono implementate dipende spesso dal browser con cui si effettua il rendering della scena. Mondi che appaiono chiari con un browser possono apparire più scuri con un altro player e viceversa. Questa situazione pone alcuni problemi, soprattutto considerando che difficilmente si può conoscere il tipo di player utilizzato dall’utente. Una buona prassi consiste nell’effettuare svariati testing del mondo su più browsers e adottare, quando possibile, quelle soluzioni che si possono tutto sommato considerare “standard”. In alternativa è possibile progettare il mondo assumendo che esso verrà visualizzato sul player più diffuso in quel momento o su quello più potente o rispondente alle esigenze del progettista.

Come già più volte dichiarato, per gli scopi della presente guida, si è deciso di utilizzare quale browser di riferimento il Cosmo Player versione 2.1.1.

Prima di analizzare le diverse tipologie di luci messe a disposizione dal VRML 2.0, è necessaria un’ ulteriore premessa: fino a questo punto si sono infatti realizzati oggetti che pur in mancanza di luci dichiarate, sono risultati comunque luminosi e quindi visibili. Ciò è stato possibile grazie all’impiego del campo emissiveColor. Questo field ha infatti il compito di descrivere il colore della luce emessa da un oggetto. Nel proseguio di questo capitolo si applicheranno le diverse tipologie di luce esterne all’oggetto senza più ricorrere al campo emissiveColor.

Il nodo DirectionalLight

Una prima possibilità per illuminare i mondi VRML consiste nell’inserimento di una luce direzionale. Il nodo DirectionalLight viene spesso posto all'inizio della descrizione dei mondi e indica la presenza di una sorgente luminosa molto lontana e i cui raggi di luce sono paralleli. Ecco un esempio:

#VRML V2.0 utf8
# utilizzo di luce direzionale: nodo DirectionalLight

DirectionalLight {
direction 1 -1 0
}
Shape {
appearance Appearance {
material Material { diffuseColor 1 0.5 0 }
}
geometry Sphere { radius 2 }
}

luce direzionale.wrl

In questo caso si è deciso di impostare i valori del campo direction in modo tale che la luce si irradi lungo gli assi x e y, dall'alto verso il basso e nella direzione negativa dell'asse y. Esistono altri campi del nodo DirectionalLight. Uno di questi, 'intensity' consente di specificare la intensità della luce, il cui valore di default è 1.

Si noti che non si è utilizzato il campo emissiveColor, bensì si è sostituito ad esso il campo diffuseColor all'interno del nodo Material. Anche in questo caso il colore dell'oggetto viene descritto specificando una tripletta di valori RGB.

Occorre fare un’ultima osservazione. I raggi di luce, così come sono stati descritti nell’esempio non sono in grado di generare ombre. Tutti gli oggetti che si volessero aggiungere alla scena risultrerebbero illuminati nello stesso modo, senza che vengano presi in considerazione eventuali ostacoli sul percorso dei raggi luminosi.

Il nodo SpotLight

Il nodo SpotLight consente di applicare luci Spot agli oggetti specificati.

Nel seguente esempio si sono definite due sfere, di cui soltanto una illuminata da una luce Spot.

#VRML V2.0 utf8

# utilizzo di luce Spot: nodo SpotLight

transform {
translation -3 0 0
children [
Shape {
appearance Appearance {
material Material { diffuseColor 1 0.5 0 }
}
geometry Sphere { radius 1.5 }
}
]
}

transform {
translation 3 0 0
children [
SpotLight {
direction 1 1 0
location -2 1 2
radius 12
beamwidth 1
cutOffAngle 1

}
Shape {
appearance Appearance {
material Material { diffuseColor 1 0.5 0 }
}
geometry Sphere { radius 1.5 }
}
]
}

luce spot.wrl

Si analizzi ora la sintassi del nodo SpotLight.
Benchè sia possibile porre il nodo in qualsiasi altra parte del file, si è ritenuto più adeguato, da un punto di vista pragmatico, inserire il nodo SpotLight all'interno del campo children dell'oggetto al quale applicare la luce spot. Si notino i campi del nodo SpotLight: il primo specifica la direzione del fascio luminoso; il secondo la posizione della sorgente luminosa ; il terzo il raggio oltre il quale la luce non ha più effetto. Gli ultimi 2 campi consentono di specificare quanto concentrato è il fascio luminoso. Occorre trovare l’adeguato dosaggio dei valori da assegnare a questi campi in modo da ottenere i risultati voluti.

L’immagine seguente può aiutare ad una migliore comprensione delle proprietà del nodo SpotLight.

spotlight

Il nodo PointLight

Il nodo PointLight consente di introdurre in una determinata posizione una sorgente luminosa che emette raggi luminosi in tutte le direzioni. La sintassi del nodo è molto semplice:

#VRML V2.0 utf8

# utilizzo di luce radiante: nodo PointLight

PointLight {
radius 5
location 0 0 0
}

transform {
translation -3 0 0
children [
Shape {
appearance Appearance {
material Material { diffuseColor 1 0.5 0 }
}
geometry Sphere { radius 1.5 }
}
]
}

transform {
translation 3 0 0
children [
Shape {
appearance Appearance {
material Material { diffuseColor 1 0.5 0 }
}
geometry Sphere { radius 1.5 }
}
]
}

luce radiante.wrl

Ultimi articoli XML

Open Graph Protocol, Facebook e il Web Semantico

Come sfruttare il Web Semantico "made in Facebook"

Introduzione a RDFa - 2

Arricchire un documento HTML con metadati semantici presi dal...

Introduzione a RDFa

Cos'è e a cosa serve il linguaggio che potrebbe aprire il campo alle...

Usare SVG per creare sfondi flessibili, scalabili e divertenti

Scopriamo cos'è il formato SVG e come possiamo usarlo in modo...

Visualizzare i metadati RDF Dublin core con le trasformazioni XSL

Mettere insieme XSL, XPATH e le definizioni Dublin core per...

Altri articoli

Guide XML

Guida Podcasting

Un percorso in 16 lezioni, per entrare nella filosofia del podcast...

Guida Smil 2.0

Un percorso pratico alla scoperta di SMIL: il linguaggio (XML) per...

Guida Web service

Cosa sono, a cosa servono e come si creano servizi Web, i sistemi...

Altre guide

Newsletter @XML

Ogni mese, direttamente nella tua e-mail: articoli, guide, FAQ e approfondimenti sui linguaggi della famiglia XML.

Iscriviti alla newsletter

Altre newsletter

Corsi in aula

Nessun corso previsto

Nessun corso previsto