Sistemi multimediali Massimiliano Piscozzi piscozzidico unimi it Riassunto

  • Slides: 23
Download presentation
Sistemi multimediali Massimiliano Piscozzi – piscozzi@dico. unimi. it

Sistemi multimediali Massimiliano Piscozzi – piscozzi@dico. unimi. it

Riassunto lezione precedente • Sintassi XML • Struttura di un file X 3 D-XML

Riassunto lezione precedente • Sintassi XML • Struttura di un file X 3 D-XML – Tag case-sensitive – Tag di apertura e chiusura – Tag correttamente innestati – Caratteri speciali –. . . <? xml version="1. 0" encoding="UTF-8"? > <!DOCTYPE X 3 D PUBLIC "http: //www. web 3 d. org/x 3 d/content/x 3 d-3. 0. dtd"> <X 3 D profile="Full"> <head/> <Scene>. . . </Scene> </X 3 D> • Nodi principali di X 3 D (specifiche e codifica XML) – Transform – Shape – Appearance – Material – Nodi derivati da X 3 DGeometry. Node

Trasformazioni e pivot point • Creazione di una primitiva geometrica nel centro del sistema

Trasformazioni e pivot point • Creazione di una primitiva geometrica nel centro del sistema di coordinate locale <Transform DEF="Pivot. Point"> <Shape>. . . </Shape> </Transform> • Utilizzo di due trasformazioni geometriche in modo da posizionare il pivot point al centro della base del cilindro <Transform DEF="Pivot. Point"> <Transform translation="0 d 0"> <Shape>. . . </Shape> </Transform> d

Esercizio • Creazione di un piano – Box: 10 m x 1 cm x

Esercizio • Creazione di un piano – Box: 10 m x 1 cm x 10 m • Creazione di una colonna – – Raggio: 30 cm Altezza: 2. 5 m Appoggiata sul piano Pivot point nella base • “Clonazione” della colonna – Posizionamento nel piano di varie istanze della colonna <Transform> <Shape> <Box size="10 0. 01 10"/> <Appearance> <Material diffuse. Color="0. 7 0. 4 0. 3"/> </Appearance> </Shape> </Transform> <Transform DEF="Colonna" translation="0 1. 25 0"> <Shape> <Cylinder radius="0. 3" height="2. 5"/> <Appearance> <Material diffuse. Color="0. 8 0. 7 0. 3"/> </Appearance> </Shape> </Transform> <Transform translation="2 0 2. 5"> <Transform USE="Colonna"/> </Transform>

Nodo Navigation. Info (1) • Descrive quali paradigmi di navigazione abilitare: – – Walk

Nodo Navigation. Info (1) • Descrive quali paradigmi di navigazione abilitare: – – Walk Examine Fly. . . • Descrive le caratteristiche fisiche dell’avatar – Dimensioni dell’avatar rilevamento collisioni • Abilita o disabilita una sorgente luminosa direzionale diretta nella direzione di osseravzione • Limite di visibilità • E’ un nodo derivato da X 3 DBindable. Node – Può essere attivo solo un oggetto di quel tipo

Nodo Navigation. Info (2) Navigation. Info : X 3 DBindable. Node{ SFBool [in] set_bind

Nodo Navigation. Info (2) Navigation. Info : X 3 DBindable. Node{ SFBool [in] set_bind SFTime [out] bind_time SFBool [out] is. Bound MFString [in, out] type SFFloat [in, out] speed SFBool [in, out] headlight MFFloat [in, out] avatar. Size. . . } [“EXAMINE” “ANY”] 1. 0 Attenzione! TRUE [0. 25 La 1. 6 lista 0. 75]dei valori è racchiusa da singoli apici: ‘ I singoli valori sono racchiusi da doppi apici: “ • Esempi – <Navigation. Info type=‘“WALK” “FLY”’/> – <Navigation. Info type=“NONE” headlight=“false”/> – <Navigation. Info type=“EXAMINE” avatar. Size=“ 0. 3 1. 8 0. 8”/>

Nodo Viewpoint (1) • Permette di definire dei punti di vista: – Posizione rispetto

Nodo Viewpoint (1) • Permette di definire dei punti di vista: – Posizione rispetto al sistema di coordinate del nodo padre – Direzione dello sguardo • Permette di associare ad un punto di vista una descrizione: – Menu dei punti di vista nel browser X 3 D • Definisce l’ampiezza del campo visivo • Definisce un centro di rotazione per il modo EXAMINE • E’ un nodo derivato da X 3 DBindable. Node – Può essere attivo solo un oggetto di quel tipo

Nodo Viewpoint (2) Viewpoint : X 3 DBindable. Node{ SFBool [in] set_bind SFTime [out]

Nodo Viewpoint (2) Viewpoint : X 3 DBindable. Node{ SFBool [in] set_bind SFTime [out] bind_time SFBool [out] is. Bound SFString [in, out] description SFVec 3 f [in, out] position SFRotation [in, out] orientation SFFloat [in, out] field. Of. View. . . } • Esempi “” 0 0 10 0010 pi / 4 &apos; ‘ – <Viewpoint description= “Dall&apos; alto” position=“ 0 10 0” orientation=“ 1 0 0 1. 57”/> – < Viewpoint description= “Grandangolo” field. Of. View=“ 1. 3”/>

Nodo Viewpoint (3) • Il punto di vista è definito attraverso gli attributi: –

Nodo Viewpoint (3) • Il punto di vista è definito attraverso gli attributi: – Position: posizione nel sistema di coordinate locale – Orientation: rotazione del vettore “direzione di osservazione”, inizialmente diretto lungo –z • Per stabilire in modo più semplice un punto di vista è consigliabile ricorrere alle trasformazioni geometriche y <Transform DEF="Target. Point" translation=". . . " rotation=". . . "> <Viewpoint description="Punto di vista" position="0 0 d"/> </Transform> Direzione di osservazione x z Posizione viewpoint d – Il nodo Transform “Target. Point” rappresenta il punto osservato dal Viewpoint – Spostando e ruotando “Target. Point” è possibile modificare la direzione di osservazione, la quale punterà sempre al centro del sistema di coordinate di “Target. Point”

Esercizio • Viewpoints definiti attraverso posizione e orientamento <Viewpoint description="Default" position="0 1. 6 4"/>

Esercizio • Viewpoints definiti attraverso posizione e orientamento <Viewpoint description="Default" position="0 1. 6 4"/> <Viewpoint description="Inclinato" position="0 1. 6 4" orientation="0 0 1 0. 3"/> <Viewpoint description="Dall&apos; alto" position="0 15 0" orientation="1 0 0 -1. 57"/> • Viewpoints inseriti in trasformazioni geometriche <Transform rotation="1 0 0 -0. 785"> <Viewpoint description="Dentro un nodo Transform" position="0 0 5"/> </Transform> • Impostazione dei metodi di navigazione <Navigation. Info type='"EXAMINE" "WALK"'/> – Provare a disabilitare la “headlight”: la scena diventa completamente nera poiché non sono state definite delle sorgenti luminose

Illuminazione (1) • 3 tipi di luci – Directional. Light: raggi paralleli generati da

Illuminazione (1) • 3 tipi di luci – Directional. Light: raggi paralleli generati da una sorgente luminosa ad inifinita distanza – Point. Light: sorgente luminosa puntiforme, attenuazione – Spot. Light: sorgente luminosa puntiforma (“faretto”), attenuazione Directional. Light : X 3 DLight. Node{ SFFloat [in, out] ambient. Intensity SFColor [in, out] color SFFloat [in, out] intensity SFVec 3 f [in, out] direction SFBool [in, out] on. . . } 0 111 1 0 0 -1 TRUE

Illuminazione (2) Point. Light : X 3 DLight. Node{ SFFloat [in, out] ambient. Intensity

Illuminazione (2) Point. Light : X 3 DLight. Node{ SFFloat [in, out] ambient. Intensity SFVec 3 f [in, out] attenuation SFColor [in, out] color SFFloat [in, out] intensity SFVec 3 f [in, out] location SFFloat [in, out] radius SFBool [in, out] on. . . } Spot. Light : X 3 DLight. Node{ SFFloat [in, out] ambient. Intensity SFVec 3 f [in, out] attenuation SFColor [in, out] color SFFloat [in, out] intensity SFVec 3 f [in, out] location SFVec 3 f [in, out] direction SFFloat [in, out] radius SFFloat [in, out] beam. Width SFFloat [in, out] cut. Off. Angle SFBool [in, out] on. . . } 0 100 111 1 000 100 TRUE 0 100 111 1 000 0 0 -1 100 pi/2 pi/4 TRUE Attenuazione: 1/max(a + b × r + c × r 2, 1)

Anchor • Permette di creare dei link attivabili cliccando sui suoi oggetti figli: –

Anchor • Permette di creare dei link attivabili cliccando sui suoi oggetti figli: – Link a file distribuiti sulla rete e a viewpoint di scene X 3 D • url = “file. Name” • url = “file. Name. x 3 d#viewpoint. Name” • url = “#viewpoint. Name” • Permette di specificare dei parametri al Browser – “keyword=value” (ex: “target = name_of_frame”) Anchor: X 3 DGroup. Node{ MFNode [in] add. Children MFNode [in] remove. Children MFNode [in] children SFString [in, out] description MFString [in, out] url MFString [in, out] parameter. . . } “” [] []

Animazioni time-based • Timers – Sensori che generano eventi al passare del tempo •

Animazioni time-based • Timers – Sensori che generano eventi al passare del tempo • Interpolatori – Interpolazione lineare fra: • • • Posizioni Rotazioni Colori Scalari. . . 0 1 – Definiscono un insieme di valori chiave (posizioni, colori, . . . ) associati a valori compresi nell’intervallo [0, 1]

Nodo Timer. Sensor (1) Timer. Sensor : X 3 DTime. Dependent. Node, X 3

Nodo Timer. Sensor (1) Timer. Sensor : X 3 DTime. Dependent. Node, X 3 DSensor. Node{ SFBool [in, out] enabled TRUE SFTime [in, out] cycle. Interval 1 SFBool [in, out] loop FALSE SFTime [in, out] start. Time 0 SFTime [in, out] stop. Time 0 SFTime [in, out] pause. Time 0 SFTime [in, out] resume. Time 0 SFFloat [out] fraction_changed SFTime [out] cycle. Time SFTime [out] time SFTime [out] elapsed. Time SFBool [out] is. Active SFBool [out] is. Paused. . . } – Il passare del tempo è basato su cicli temporali – E’ possibile stabilire in che momento far partire e fermare il timer – Il timer genera un evento fraction_changed: valore compreso tra 0 (inizio del ciclo) e 1 (fine del ciclo)

Nodo Time. Sensor (2) • Inizialmente un Time. Sensor è inattivo: – Viene attivato

Nodo Time. Sensor (2) • Inizialmente un Time. Sensor è inattivo: – Viene attivato impostando loop a true – Oppure impostando appropriatamente il valore di start. Time • Il Time. Sensor si disattiva al primo dei seguenti eventi: – Raggiungimento della fine di un ciclo e loop=false – now >= stop. Time, se stop. Time >= start. Time loop = true stop. Time start. Time cycle. Interval t is. Active = true

Nodo Time. Sensor (2) • Inizialmente un Time. Sensor è inattivo: – Viene attivato

Nodo Time. Sensor (2) • Inizialmente un Time. Sensor è inattivo: – Viene attivato impostando loop a true – Oppure impostando appropriatamente il valore di start. Time • Il Time. Sensor si disattiva al primo dei seguenti eventi: – Raggiungimento della fine di un ciclo e loop=false – now >= stop. Time, se stop. Time >= start. Time loop = false stop. Time cycle. Interval start. Time t is. Active = true is. Active = false

Nodo Time. Sensor (2) • Inizialmente un Time. Sensor è inattivo: – Viene attivato

Nodo Time. Sensor (2) • Inizialmente un Time. Sensor è inattivo: – Viene attivato impostando loop a true – Oppure impostando appropriatamente il valore di start. Time • Il Time. Sensor si disattiva al primo dei seguenti eventi: – Raggiungimento della fine di un ciclo e loop=false – now >= stop. Time, se stop. Time >= start. Time loop = true start. Time stop. Time cycle. Interval t is. Active = true is. Active = false Gli e is. Active=false vengono generati Allaeventi fine diis. Active=true ogni ciclo viene generato un evento cycle. Time: all’inizio fine dell’intervallo temporale utile perelaalla sincronizzazione di animazioni

Nodi interpolatori Analogamente per: Position. Interpolator : X 3 DInterpolator. Node{ SFFloat [in] set_fraction

Nodi interpolatori Analogamente per: Position. Interpolator : X 3 DInterpolator. Node{ SFFloat [in] set_fraction MFFloat [in, out] key [] MFVec 3 f [in, out] key. Value [] SFVec 3 f [out] value_changed. . . } set_fraction key 0 key. Value . . . – Color. Interpolator – Orientation. Interpolator – Scalar. Interpolator –. . . 0. 12 0. 2. . . 0. 7 0. 95 1 . . value_changed Fornendo in input all’interpolatore un valore compreso tra 0 e 1 esso restituisce in output il valore associato (posizione, colore, scalare. . . ) in base all’interpolazione definita dai valori chiave

Route • Il tag <ROUTE. . . /> permette di connettere due campi di

Route • Il tag <ROUTE. . . /> permette di connettere due campi di due nodi distinti al fine di descrivere il behaviour graph • Sintassi: <ROUTE from. Field=“. . . ” from. Node=“. . . ” to. Field=“. . . ” to. Node=“. . . ”/> • I campi from. Node e to. Node contengono i nomi dei due nodi – essi devono quindi essere nominati attraverso l’attributo DEF • I campi specificati negli attributi from. Field e to. Field devono essere dello stesso tipo • Il campo specificato nell’attributo from. Field deve essere – o di tipo output. Only – o di tipo input. Output • Il campo specificato nell’attributo to. Field deve essere – o di tipo input. Only – o di tipo input. Output

Route: esempio • Animazione della traslazione di un nodo transform Time. Sensor Position. Interpolator

Route: esempio • Animazione della traslazione di un nodo transform Time. Sensor Position. Interpolator Transform cycle. Time set_fraction translation fraction_changed key ·· · key. Value value. Changed ·· · <Time. Sensor DEF="Timer" cycle. Interval="5" loop="true"/> <Position. Interpolator DEF="Interpolatore" key="0 0. 3 0. 8 1" key. Value="0 0 0, 0 3 0, 3 0 0, 0 0 0"/> <ROUTE from. Field="fraction_changed" from. Node="Timer" to. Field="set_fraction" to. Node="Interpolatore"/> <Transform DEF=”Trasformazione”> Nodi Figli </Transform> <ROUTE from. Field="value_changed" from. Node="Interpolatore" to. Field="set_translation" to. Node="Trasformazione"/>

Esercizio (1) Animazione (in contemporanea) della rotazione di un parallelepipedo, del colore di una

Esercizio (1) Animazione (in contemporanea) della rotazione di un parallelepipedo, del colore di una sfera e della traslazione di un cono • Creazione dei tre oggetti distribuiti lungo l’asse X <Transform translation="-3 0 0"> <Transform DEF="box. Transform"> <Shape> <Box size="1 3 1"/> <Appearance> <Material diffuse. Color="1 0 0"/> </Appearance> </Shape> </Transform> <Transform> <Shape> <Sphere radius="1"/> <Appearance> <Material DEF="sphere. Material" diffuse. Color="1 0 1"/> </Appearance> </Shape> </Transform> <Transform translation="3 0 0"> <Transform DEF="cone. Transform"> <Shape> <Cone bottom. Radius="1" height="2"/> <Appearance> <Material diffuse. Color="0 0 1"/> </Appearance> </Shape> </Transform> • Creazione di un Time. Sensor <Time. Sensor DEF="timer" cycle. Interval="4" loop="true"/>

Esercizio (2) • Creazione dei 3 interpolatori <Orientation. Interpolator DEF="interpolator 1" key="0 0. 5

Esercizio (2) • Creazione dei 3 interpolatori <Orientation. Interpolator DEF="interpolator 1" key="0 0. 5 1" key. Value="0 0 1 0, 0 0 1 1. 57, 0 0 1 3. 14"/> <Color. Interpolator DEF="interpolator 2" key="0 0. 2 0. 7 1" key. Value="1 0 1, 1 1 0, 1 0 1"/> <Position. Interpolator DEF="interpolator 3" key="0 0. 25 0. 75 1" key. Value="0 0 0, 0 2 0, 0 -2 0, 0 0 0"/> • Routing degli eventi <ROUTE from. Node="timer" from. Field="fraction_changed" to. Node="interpolator 1" to. Field="set_fraction"/> <ROUTE from. Node="interpolator 1" from. Field="value_changed" to. Node="box. Transform" to. Field="set_rotation"/> <ROUTE from. Node="timer" from. Field="fraction_changed" to. Node="interpolator 2" to. Field="set_fraction"/> <ROUTE from. Node="interpolator 2" from. Field="value_changed" to. Node="sphere. Material" to. Field="set_diffuse. Color"/> <ROUTE from. Node="timer" from. Field="fraction_changed" to. Node="interpolator 3" to. Field="set_fraction"/> <ROUTE from. Node="interpolator 3" from. Field="value_changed" to. Node=“cone. Transform" to. Field="set_translation"/>