Massimiliano Piscozzi –

Slides:



Advertisements
Presentazioni simili
Massimiliano Piscozzi – Sistemi multimediali.
Advertisements

Massimiliano Piscozzi – Sistemi multimediali.
Massimiliano Piscozzi – Sistemi multimediali.
Massimiliano Piscozzi – Sistemi multimediali.
Massimiliano Piscozzi – Sistemi multimediali.
Massimiliano Piscozzi – Sistemi multimediali.
Virtual Reality Modeling Language
Table View. Problemi ricorrenti Una situazione ricorrente è quella in cui il controller potrebbe avere un’altezza superiore a quella dello schermo. In.
1 Elementi DI INFORMATICA Università degli Studi di Cagliari Corso di Laurea in Ingegneria Elettronica Linguaggio C A.A. 2011/2012
1 Simulazione Numerica dei Fenomeni di Trasporto Necessità di introduzione dei tensori  11  12  13  23  21  22 Vogliamo descrivere in un modo che.
Elaborazione delle Immagini Operatori Puntuali Luigi Cinque
Lezione 11 Architetture dei VI Obiettivi di apprendimento: A.Tecniche di gestione degli errori B.Architetture dei VIs E.VI templates.
.  I tipi di dati non primitivi sono gli array, le struct e le union.  Gli array sono degli aggregati di variabili dello stesso tipo.  La dichiarazione.
Analisi di Immagini Filtri L
Il modello logico Il modello logico.
Sistemi e Applicazioni per l’Amministrazione Digitale
Ereditarietà Uno dei principi della programmazione orientata agli oggetti (OOP) è il riuso Le classi dovrebbero essere progettate come componenti riutilizzabili.
Massimiliano Piscozzi –
La calendarizzazione delle attività
Le operazioni relazionali
Impostazione evento finale d’Istituto
Linguaggi di markup: CSS
Massimiliano Piscozzi –
Tutorato Elementi di Informatica 2013
DISTRIBUZIONI TEORICHE DI PROBABILITA’
Sistema di riferimento su una retta
File con indice (sparso)
ESERCIZI CON LE ISOMETRIE
Massimiliano Piscozzi –
Programmazione a oggetti
I vincoli di integrità Alcuni aspetti della realtà NON possono essere modellati solamente con entità, attributi e relazioni, per esempio i vincoli di integrità.
Utilizzo razionale di un vasto numero di ricevitori GPS
Organizzazione fisica
* Il Sistema Operativo GNU/Linux * Sistema Operativo e Applicazioni
UML Creato da: Enrico Tarantino Alessandro Vilucchi Roberta Barcella.
Tipo di dato: array Un array è un tipo di dato usato per memorizzare una collezione di variabili dello stesso tipo. Per memorizzare una collezione di 7.
Gli enti geometrici fondamentali
I tag essenziali.
Usi (meno scontati) della visita DFS
DTD Document Type Definition per XML
Creazione di pagine per Internet
[Nome progetto] Relazione finale
HYPER TEXT MARK-UP LANGUAGE
ABAP Objects ALV Grid Mantova, 30 dicembre 2018.
Oggetti Java.
SQL per la modifica di basi di dati
Dati caratteristici La Luna ed i suoi movimenti •Raggio medio: 1738 km
[Nome prodotto] Piano di marketing
[Nome progetto] Relazione finale
Introduzione agli Algoritmi e alle Strutture Dati
LA RETTA.
2. JavaScript nelle pagine web
PROPONI UN TITOLO ALLA CONFIGURAZIONE
[Nome prodotto] Piano di marketing
Introduzione a PowerPoint
DOM Document Object Model.
8. Altri oggetti JavaScript
APPUNTI SUL LINGUAGGIO C
MAYA BASICS.
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
UNIT 12 INTERFACCIA SERIALE.
Per vedere la simulazione premere la barra spaziatrice o un click del mouse! PROSEGUI.
Ing. Maurizio Bassani LOGISTICA - Capitolo 3 - Modulo 1
Lezione 7 Editing digitale della partitura Creazione di plug-in con interfaccia grafica Laboratorio di Informatica Musicale – Prof. Luca A. Ludovico.
Introduzione a Python Prima Lezione.
Da HTML a XHTML A. Ferrari Alberto Ferrari.
Flusso del campo elettrico e teorema di Gauss
Corso di Fondamenti di Informatica
Transcript della presentazione:

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

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 "http://www.web3d.org/x3d/content/x3d-3.0.dtd"> <X3D profile="Full"> <head/> <Scene> ... </Scene> </X3D> Nodi principali di X3D (specifiche e codifica XML) Transform Shape Appearance Material Nodi derivati da X3DGeometryNode

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

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

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

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 [0.25 1.6 0.75] ... } 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=“0.3 1.8 0.8”/>

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

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

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”

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 <NavigationInfo 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 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 0 0 -1 SFBool [in,out] on TRUE ... }

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 0 0 -1 SFFloat [in,out] radius 100 SFFloat [in,out] beamWidth pi/2 SFFloat [in,out] cutOffAngle pi/4 SFBool [in,out] on TRUE ... }

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

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

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)

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

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

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

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

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

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="0 0.3 0.8 1" 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"/>

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"/>

Esercizio (2) Creazione dei 3 interpolatori Routing degli eventi <OrientationInterpolator DEF="interpolator1" key="0 0.5 1" keyValue="0 0 1 0, 0 0 1 1.57, 0 0 1 3.14"/> <ColorInterpolator DEF="interpolator2" key="0 0.2 0.7 1" keyValue="1 0 1, 1 1 1, 1 1 0, 1 0 1"/> <PositionInterpolator DEF="interpolator3" key="0 0.25 0.75 1" keyValue="0 0 0, 0 2 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"/>