... Nodi principali di X3D (specifiche e codifica XML) Transform Shape Appearance Material Nodi derivati da X3DGeometryNode"> ... Nodi principali di X3D (specifiche e codifica XML) Transform Shape Appearance Material Nodi derivati da X3DGeometryNode">

La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Massimiliano Piscozzi –

Presentazioni simili


Presentazione sul tema: "Massimiliano Piscozzi –"— Transcript della presentazione:

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

2 Riassunto lezione precedente
Sintassi XML Tag case-sensitive Tag di apertura e chiusura Tag correttamente innestati Caratteri speciali ... Struttura di un file X3D-XML <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE X3D PUBLIC " <X3D profile="Full"> <head/> <Scene> ... </Scene> </X3D> Nodi principali di X3D (specifiche e codifica XML) Transform Shape Appearance Material Nodi derivati da X3DGeometryNode

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

4 Esercizio Creazione di un piano Creazione di una colonna
Box: 10m x 1cm x 10m <Transform> <Shape> <Box size=" "/> <Appearance> <Material diffuseColor=" "/> </Appearance> </Shape> </Transform> Creazione di una colonna Raggio: 30cm Altezza: 2.5m Appoggiata sul piano Pivot point nella base <Transform> <Transform DEF="Colonna" translation=" "> <Shape> <Cylinder radius="0.3" height="2.5"/> <Appearance> <Material diffuseColor=" "/> </Appearance> </Shape> </Transform> “Clonazione” della colonna Posizionamento nel piano di varie istanze della colonna <Transform translation=" "> <Transform USE="Colonna"/> </Transform>

5 Nodo NavigationInfo (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 X3DBindableNode Può essere attivo solo un oggetto di quel tipo

6 Nodo NavigationInfo (2)
NavigationInfo : X3DBindableNode{ SFBool [in] set_bind SFTime [out] bind_time SFBool [out] isBound MFString [in,out] type [“EXAMINE” “ANY”] SFFloat [in,out] speed 1.0 SFBool [in,out] headlight TRUE MFFloat [in,out] avatarSize [ ] ... } Attenzione! La lista dei valori è racchiusa da singoli apici: ‘ I singoli valori sono racchiusi da doppi apici: “ Esempi <NavigationInfo type=‘“WALK” “FLY”’/> <NavigationInfo type=“NONE” headlight=“false”/> <NavigationInfo type=“EXAMINE” avatarSize=“ ”/>

7 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 X3D Definisce l’ampiezza del campo visivo Definisce un centro di rotazione per il modo EXAMINE E’ un nodo derivato da X3DBindableNode Può essere attivo solo un oggetto di quel tipo

8 Nodo Viewpoint (2) Esempi <Viewpoint description= “Dall'alto”
Viewpoint : X3DBindableNode{ SFBool [in] set_bind SFTime [out] bind_time SFBool [out] isBound SFString [in,out] description “” SFVec3f [in,out] position SFRotation [in,out] orientation SFFloat [in,out] fieldOfView pi / 4 ... } &apos;  ‘ Esempi <Viewpoint description= “Dall&apos;alto” position=“0 10 0” orientation=“ ”/> < Viewpoint description= “Grandangolo” fieldOfView=“1.3”/>

9 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 x z Direzione di osservazione d <Transform DEF="TargetPoint" translation="..." rotation="..."> <Viewpoint description="Punto di vista" position="0 0 d"/> </Transform> Posizione viewpoint Il nodo Transform “TargetPoint” rappresenta il punto osservato dal Viewpoint Spostando e ruotando “TargetPoint” è possibile modificare la direzione di osservazione, la quale punterà sempre al centro del sistema di coordinate di “TargetPoint”

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

11 Illuminazione (1) 3 tipi di luci
DirectionalLight: raggi paralleli generati da una sorgente luminosa ad inifinita distanza PointLight: sorgente luminosa puntiforme, attenuazione SpotLight: sorgente luminosa puntiforma (“faretto”), attenuazione DirectionalLight : X3DLightNode{ SFFloat [in,out] ambientIntensity 0 SFColor [in,out] color 1 1 1 SFFloat [in,out] intensity 1 SFVec3f [in,out] direction SFBool [in,out] on TRUE ... }

12 Illuminazione (2) Attenuazione: 1/max(a + b × r + c × r2, 1)
PointLight : X3DLightNode{ SFFloat [in,out] ambientIntensity 0 SFVec3f [in,out] attenuation 1 0 0 SFColor [in,out] color 1 1 1 SFFloat [in,out] intensity 1 SFVec3f [in,out] location 0 0 0 SFFloat [in,out] radius 100 SFBool [in,out] on TRUE ... } Attenuazione: 1/max(a + b × r + c × r2, 1) SpotLight : X3DLightNode{ SFFloat [in,out] ambientIntensity 0 SFVec3f [in,out] attenuation 1 0 0 SFColor [in,out] color 1 1 1 SFFloat [in,out] intensity 1 SFVec3f [in,out] location 0 0 0 SFVec3f [in,out] direction SFFloat [in,out] radius 100 SFFloat [in,out] beamWidth pi/2 SFFloat [in,out] cutOffAngle pi/4 SFBool [in,out] on TRUE ... }

13 Anchor Permette di creare dei link attivabili cliccando sui suoi oggetti figli: Link a file distribuiti sulla rete e a viewpoint di scene X3D url = “fileName” url = “fileName.x3d#viewpointName” url = “#viewpointName” Permette di specificare dei parametri al Browser “keyword=value” (ex: “target = name_of_frame”) Anchor: X3DGroupNode{ MFNode [in] addChildren MFNode [in] removeChildren MFNode [in] children SFString [in,out] description “” MFString [in,out] url [] MFString [in,out] parameter [] ... }

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

15 Nodo TimerSensor (1) Il passare del tempo è basato su cicli temporali
TimerSensor : X3DTimeDependentNode, X3DSensorNode{ SFBool [in,out] enabled TRUE SFTime [in,out] cycleInterval 1 SFBool [in,out] loop FALSE SFTime [in,out] startTime 0 SFTime [in,out] stopTime 0 SFTime [in,out] pauseTime 0 SFTime [in,out] resumeTime 0 SFFloat [out] fraction_changed SFTime [out] cycleTime SFTime [out] time SFTime [out] elapsedTime SFBool [out] isActive SFBool [out] isPaused ... } 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)

16 Nodo TimeSensor (2) Inizialmente un TimeSensor è inattivo:
Viene attivato impostando loop a true Oppure impostando appropriatamente il valore di startTime Il TimeSensor si disattiva al primo dei seguenti eventi: Raggiungimento della fine di un ciclo e loop=false now >= stopTime, se stopTime >= startTime loop = true cycleInterval stopTime startTime t isActive = true

17 Nodo TimeSensor (2) Inizialmente un TimeSensor è inattivo:
Viene attivato impostando loop a true Oppure impostando appropriatamente il valore di startTime Il TimeSensor si disattiva al primo dei seguenti eventi: Raggiungimento della fine di un ciclo e loop=false now >= stopTime, se stopTime >= startTime loop = false cycleInterval stopTime startTime t isActive = true isActive = false

18 Nodo TimeSensor (2) Inizialmente un TimeSensor è inattivo:
Viene attivato impostando loop a true Oppure impostando appropriatamente il valore di startTime Il TimeSensor si disattiva al primo dei seguenti eventi: Raggiungimento della fine di un ciclo e loop=false now >= stopTime, se stopTime >= startTime loop = true cycleInterval startTime stopTime t isActive = true isActive = false Alla fine di ogni ciclo viene generato un evento cycleTime: utile per la sincronizzazione di animazioni Gli eventi isActive=true e isActive=false vengono generati all’inizio e alla fine dell’intervallo temporale

19 Nodi interpolatori Analogamente per: set_fraction value_changed
PositionInterpolator : X3DInterpolatorNode{ SFFloat [in] set_fraction MFFloat [in,out] key [] MFVec3f [in,out] keyValue [] SFVec3f [out] value_changed ... } Analogamente per: ColorInterpolator OrientationInterpolator ScalarInterpolator ... set_fraction value_changed key 0.12 0.2 0.7 0.95 1 keyValue ... ... ... ... ... ... 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

20 Route Il tag <ROUTE .../> permette di connettere due campi di due nodi distinti al fine di descrivere il behaviour graph Sintassi: <ROUTE fromField=“...” fromNode=“...” toField=“...” toNode=“...”/> I campi fromNode e toNode contengono i nomi dei due nodi essi devono quindi essere nominati attraverso l’attributo DEF I campi specificati negli attributi fromField e toField devono essere dello stesso tipo Il campo specificato nell’attributo fromField deve essere o di tipo outputOnly o di tipo inputOutput Il campo specificato nell’attributo toField deve essere o di tipo inputOnly

21 PositionInterpolator
Route: esempio Animazione della traslazione di un nodo transform TimeSensor PositionInterpolator Transform cycleTime set_fraction translation fraction_changed key · · · · · · keyValue valueChanged · · · <TimeSensor DEF="Timer" cycleInterval="5" loop="true"/> <PositionInterpolator DEF="Interpolatore" key=" " keyValue="0 0 0, 0 3 0, 3 0 0, 0 0 0"/> <Transform DEF=”Trasformazione”> Nodi Figli </Transform> <ROUTE fromField="fraction_changed" fromNode="Timer" toField="set_fraction" toNode="Interpolatore"/> <ROUTE fromField="value_changed" fromNode="Interpolatore" toField="set_translation" toNode="Trasformazione"/>

22 Esercizio (1) Animazione (in contemporanea) della rotazione di un parallelepipedo, del colore di una sfera e della traslazione di un cono <Transform translation="-3 0 0"> <Transform DEF="boxTransform"> <Shape> <Box size="1 3 1"/> <Appearance> <Material diffuseColor="1 0 0"/> </Appearance> </Shape> </Transform> Creazione dei tre oggetti distribuiti lungo l’asse X <Transform> <Sphere radius="1"/> <Material DEF="sphereMaterial" diffuseColor="1 0 1"/> <Transform translation="3 0 0"> <Transform DEF="coneTransform"> <Cone bottomRadius="1" height="2"/> diffuseColor="0 0 1"/> Creazione di un TimeSensor <TimeSensor DEF="timer" cycleInterval="4" loop="true"/>

23 Esercizio (2) Creazione dei 3 interpolatori Routing degli eventi
<OrientationInterpolator DEF="interpolator1" key=" " keyValue=" , , "/> <ColorInterpolator DEF="interpolator2" key=" " keyValue="1 0 1, 1 1 1, 1 1 0, 1 0 1"/> <PositionInterpolator DEF="interpolator3" key=" " keyValue="0 0 0, 0 2 0, , 0 0 0"/> Routing degli eventi <ROUTE fromNode="timer" fromField="fraction_changed" toNode="interpolator1" toField="set_fraction"/> <ROUTE fromNode="interpolator1" fromField="value_changed" toNode="boxTransform" toField="set_rotation"/> <ROUTE fromNode="timer" fromField="fraction_changed" toNode="interpolator2" toField="set_fraction"/> <ROUTE fromNode="interpolator2" fromField="value_changed" toNode="sphereMaterial" toField="set_diffuseColor"/> <ROUTE fromNode="timer" fromField="fraction_changed" toNode="interpolator3" toField="set_fraction"/> <ROUTE fromNode="interpolator3" fromField="value_changed" toNode=“coneTransform" toField="set_translation"/>


Scaricare ppt "Massimiliano Piscozzi –"

Presentazioni simili


Annunci Google