Massimiliano Piscozzi - PowerPoint PPT Presentation

About This Presentation
Title:

Massimiliano Piscozzi

Description:

Nodo Script Per gestire gli eventi in input occorre definire delle funzioni associate ai campi InputOnly o InputOutput Per spedire degli eventi associati ai campi ... – PowerPoint PPT presentation

Number of Views:50
Avg rating:3.0/5.0
Slides: 20
Provided by: MaxP151
Category:

less

Transcript and Presenter's Notes

Title: Massimiliano Piscozzi


1
Sistemi multimediali
Massimiliano Piscozzi piscozzi_at_dico.unimi.it
2
Prototipi (3)
  • La definizione di un prototipo può essere
    contenuta in un file diverso da quello in cui
    vengono create le istanze

File A File X3D-XML contenente la
dichiarazione di uno o più prototipi
File D File X3D-XML che utilizza istanze
di prototipi definiti esternamente
File B File X3D-XML contenente la
dichiarazione di uno o più prototipi
File C File X3D-XML contenente la
dichiarazione di uno o più prototipi
  • Maggiore riusabilità dei nodi definiti
    dallutente
  • Semplificazione nella scrittura dei file X3D-XML

3
ExternProtoDeclare
  • La dichiarazione di un prototipo definito
    esternamente avviene attraverso il tag
    ExternProtoDeclare

ltExternProtoDeclare name... url.../gt
4
Scripting
  • Uno script
  • E un nodo facente parte dello scene graph
  • Contiene un comportamento definito attraverso
    funzioni scritte in ECMAScript
  • Può generare eventi
  • Lutilizzo di scripts permette di
  • Programmare comportamenti più evoluti rispetto a
    quelli ottenibili tramite i nodi predefiniti (ex
    pulsanti a più stati)
  • Definire matematicamente delle traiettore (ex
    parabole, ellissi)
  • Automatizzare comportamenti (ex creazione di un
    gran numero di istanze di un oggetto)
  • Convertire eventi (ex rollOver button)
  • Modificare dinamicamente lo scene graph e il
    behaviour graph
  • ...

5
Nodo Script
ltScriptgt ... lt!CDATA ...
gt lt/Scriptgt
  • Per gestire gli eventi in input occorre definire
    delle funzioni associate ai campi InputOnly o
    InputOutput
  • Per spedire degli eventi associati ai campi
    OutputOnly o InputOutput è sufficiente
    modificarne i valori allinterno delle funzioni

6
ECMAScript (1)
  • Variabili
  • Linguaggio debolmente tipizzato
  • Tipi predefiniti
  • boolean, number, string, object, ...
  • Operatori
  • Unari ! (NOT), -, (incremento), --
    (decremento)
  • Binari , - , ,/ , (modulo)
  • Relazionali lt, gt, lt, gt, , !
  • Logici (AND), (OR)
  • Strutture di controllo
  • Condizionali if..else, switch
  • Iterative for, while, do..while

var a a 5 print(a) a Hello
World! print(a)
7
ECMAScript (2)
  • Funzioni
  • Non occorre specificare il tipo del valore
    restituito
  • Oggetto Array
  • Array dinamico costituito da elementi di
    qualsiasi tipo
  • Proprietà length
  • Oggetto Math
  • Oggetto globale non va istanziato tramite new
  • Costanti matematiche (proprietà) PI, E, SQRT2,
    LN2, LN10, ...
  • Funzioni matematiche (metodi) max(), min(),
    pow(), sqrt(),
  • sin(), cos(), tan(), random()

function myFunction(parameters) ...
function somma(a,b) return (ab)
8
ECMAScript (3)
  • ECMAScript e nodi Script (X3D)
  • I tipi di dato booleani (SFBool), scalari
    (SFFloat, SFDouble, SFInt32, SFTime) e le
    stringhe (SFString) sono rappresentati attraverso
    i tipi base di ECMAScript (boolean, number,
    string)
  • I restanti tipi di dato singoli (SFColor,
    SFVec3f, ...) sono rappresentati attraverso degli
    oggetti
  • Ex verde new SFColor(0,1,0)
  • Ex origine new SFVec3f(0,0,0)
  • I tipi di dato multipli (MFInt32, MFVec3f, ...)
    sono rappresentati attraverso degli array
  • Ex v new MFInt32(2,5,1,-3)

9
ECMAScript (4)
  • ECMAScript e nodi Script (X3D)
  • Per ogni campo di tipo InputOnly e InputOutput
    bisogna definire una funzione con lo stesso nome
  • E possibile definire due funzioni richiamate
    quando lo script è caricato o eliminato dal
    Browser initialize() e shutdown()
  • La funzione print() permette di scrivere sulla
    console (debug)
  • Tramite loggetto globale Browser() è possibile
    modificare dinamicamente lo scene graph e il
    behaviour graph
  • Browser.createFromVRMLString(stringVRML)
  • Browser.addRoute(fromNode,fromField,toNode,toField
    )
  • Browser.deleteRoute(fromNode,fromField,toNode,toFi
    eld)

10
Script esempio
  • Movimento sinusoidale di un cubo

TimeSensor
Script
Transform
cycleInterval
translation
set_fraction

loop
value_changed

fraction_changed

ltScript DEF"MyScript"gt ltfield
name"set_fraction" type"SFFloat"
accessType"inputOnly"/gt ltfield
name"value_changed" type"SFVec3f"
accessType"outputOnly"/gt lt!CDATA
ecmascript function initialize()
print(Script inizializzato!)
function set_fraction(value)
value_changed0 -3 6 value
value_changed1 2 Math.Sin(value6.28)
value_changed2 0 gt
lt/Scriptgt
11
Esempio (1)
  • Creazione di un prototipo di un pulsante a due
    stati
  • Lo stato del pulsante deve essere rappresentato
    dal suo colore (variazione del diffuseColor)
  • Il pulsante deve illuminarsi al passaggio del
    mouse (variazione dellemissiveColor)
  • Il pulsante può avere forme diverse

12
Esempio (2)
ltProtoDeclare nameButtongt
ltProtoInterfacegt ltfield name"geometry"
type"SFNode" accessType"inputOnly"gt
ltSphere/gt lt/fieldgt lt/ProtoInterfacegt
ltProtoBodygt ... lt/ProtoBodygt lt/ProtoDecla
regt
  • Dichiarazione del prototipo

13
Esempio (3)
ltScript DEF"MyScript"gt ltfield name"isOver"
type"SFBool" accessType"inputOnly
"/gt ltfield name"touchTime" type"SFTime"
accessType"inputOnly"/gt ltfield
name"state" type"SFBool"
accessType"inputOutput"/gt ltfield
name"emissiveColor_changed" type"SFColor"
accessType"outputOnly"/gt ltfield
name"diffuseColor_changed" type"SFColor"
accessType"outputOnly"/gt
lt!CDATA ecmascript ...
gt lt/Scriptgt
  • Nodo Script

14
Esempio (4)
function state(value) function
touchTime(value) state !state if
(state) diffuseColor_changed new
SFColor(1, 0.2, 0.5) else
diffuseColor_changed new SFColor(0.2, 1, 0.5)
function isOver(value) if (value)
emissiveColor_changed new SFColor(0.2,
0.2, 0.2) else
emissiveColor_changed new SFColor(0, 0, 0)
  • Funzioni definite allinterno del nodo Script

15
Esempio (5)
  • Routing degli eventi allinterno di ltProtoBodygt

ltROUTE fromNode"Sensor" fromField"isOver"
toNode"MyScript" toField"isOver"/gt lt
ROUTE fromNode"Sensor" fromField"touchTime"
toNode"MyScript" toField"touchTime"
/gt ltROUTE fromNode"MyScript" fromField"emissiveC
olor_changed" toNode"MaterialBut
ton" toField"set_emissiveColor"/gt ltROUTE
fromNode"MyScript" fromField"diffuseColor_change
d" toNode"MaterialButton"
toField"set_diffuseColor"/gt
  • Creazione di istanze del prototipo

ltProtoInstance name"button"gt ltfieldValue
name"geometry"gt ltBox/gt
lt/fieldValuegt lt/ProtoInstancegt
16
ProximitySensor
  • Rileva quando lavatar entra (ed esce) in una
    zona rappresentata da un parallelepipedo
  • Quando lutente si trova allinterno del
    parallelepipedo il sensore traccia la sua
    posizione e orientazione

ProximitySensor X3DEnvironmentalSensorNode
SFBool in,out enabled TRUE SFVec3f
in,out center 0 0 0 SFVec3f in,out
size 0 0 0 SFTime out enterTime SFTime
out exitTime SFRotation out orientation_
changed SFVec3f out position_changed SFBool
out isActive ...
  • Permette di far iniziare (terminare) delle
    animazioni quando lavatar si avvicina
    (allontana) ad un particolare oggetto
  • Permette di muovere un oggetto in modo da
    replicare il movimento dellavatar (utile per la
    creazione di interfacce)

17
Esempio (1)
  • Animazione di un parallelepipedo in base alla
    vicinanza dellavatar

PositionInterp.
TimeSensor
set_fraction
startTime
value_changed
fraction_changed
Transform
ProximitySensor


scale
enterTime

exitTime

PositionInterp.
TimeSensor
Shape
set_fraction
startTime

value_changed
fraction_changed


Appearance

Box
Material


18
Esempio (2)
  • Posizionamento di un oggetto in base alla
    posizione dellavatar

ProximitySensor
Transform
position_changed
translation
orientation_changed
rotation


Collision

Transform

19
VisibilitySensor
  • Rileva quando unarea rappresentata da un
    parallelepipedo è visibile allavatar

VisibilitySensor X3DEnvironmentalSensorNode
SFBool in,out enabled TRUE SFVec3f
in,out center 0 0 0 SFVec3f in,out
size 0 0 0 SFTime out enterTime SFTime
out exitTime ...
  • Permette di far iniziare (terminare) delle
    animazioni quando lavatar può o meno vedere un
    particolare oggetto (utile per attirare
    lattenzione dellutente)
Write a Comment
User Comments (0)
About PowerShow.com