Massimiliano Piscozzi – Sistemi multimediali
Esercizio (1) Animazione (in contemporanea) della rotazione di un parallelepipedo, del colore di una sfera e della traslazione di un cono TimeSensor cycleInterval · · · loop fraction_changed OrientationInterp. set_fraction · · · key keyValue value_changed ColorInterpolator set_fraction · · · key keyValue value_changed PositionInterp. set_fraction · · · key keyValue value_changed Transform rotation · · · Transform translation · · · Material diffuseColor · · ·
Esercizio (2) <Material diffuseColor="1 0 0"/> Creazione dei tre oggetti distribuiti lungo lasse X <Material DEF="sphereMaterial" diffuseColor="1 0 1"/> <Cone bottomRadius="1" height="2"/> <Material diffuseColor="0 0 1"/> Creazione di un TimeSensor
Esercizio (3) Creazione dei 3 interpolatori Routing degli eventi
TouchSensor Rileva quando lutente punta ad un oggetto figlio del nodo padre del sensore Utile soprattutto per la creazione di pulsanti TouchSensor : X3DTouchSensorNode{ SFString [in,out] description SFBool[in,out] enabledTRUE SFVec3f [out] hitNormal_changed SFVec3f [out] hitPoint_changed SFVec3f[out]hitTexCoord_changed SFBool[out]isActive SFBool[out]isOver SFTime[out]touchTime... }
Esercizio Spostamento di una piccola sfera sulla superficie di un cono Creazione della sfera Creazione del cono e del sensore Routing dellevento <ROUTE fromNode="sensor" fromField="hitPoint_changed" toNode="sphereTransform" toField="set_translation"/>
Esercizio (1) Creazione di un pulsante per far apparire un oggetto TouchSensor touchTime · · · Transform · · ·... TimeSensor cycleInterval loop · · · startTime ScalarInterpolator set_fraction · · · key keyValue value_changed Material diffuseColor · · · fraction_changed children
Esercizio (2) Creazione del pulsante Creazione delloggetto da far apparire <Material DEF="sphereMaterial" diffuseColor="1 1 0" transparency="1"/>
Esercizio (3) Creazione del timer Creazione dellinterpolatore <ScalarInterpolator DEF="interpolator" key="0 1" keyValue="1 0"/> Routing degli eventi <ROUTE fromNode="touchSensor" fromField="touchTime" toNode="timer" toField="startTime"/> <ROUTE fromNode="timer" fromField="fraction_changed" toNode="interpolator" toField="set_fraction"/> <ROUTE fromNode="interpolator" fromField="value_changed" toNode="sphereMaterial" toField="set_transparency"/>
PlaneSensor : X3DDragSensorNode{ SFString[in,out]description SFBool [in,out] autoOffsetTRUE SFVec3f[in,out] offset0 0 0 SFBool[in,out] enabledTRUE SFVec2f [in,out] minPosition0 0 SFVec2f[in,out]maxPosition SFBool[out]isActive SFBool[out]isOver SFVec3f[out]trackPoint_changed SFVec3f[out]translation_changed... } Altri sensori (1) Sensori per il dragging: –PlaneSensor: dragging rispetto ad un piano (z=0 nel sistema di coordinate locali) –SphereSensor: dragging di tipo rotazionale rispetto ad un punto (il centro del sistema di coordinate locale) –CylinderSensor: dragging di tipo rotazionale rispetto allasse Y del sistema di coordinate locali x y z minPosition maxPosition
Altri sensori (2) SphereSensor : X3DDragSensorNode{ SFString[in,out]description SFBool [in,out] autoOffsetTRUE SFVec3f[in,out] offset0 0 0 SFBool[in,out] enabledTRUE SFBool[out]isActive SFBool[out]isOver SFVec3f[out]trackPoint_changed SFRotation[out]rotation_changed... } CylinderSensor : X3DDragSensorNode{ SFString[in,out]description SFBool [in,out] autoOffsetTRUE SFVec3f[in,out] offset0 0 0 SFBool[in,out] enabledTRUE SFFloat [in,out] minAngle0 SFFloat[in,out]maxAngle -1 SFFloat[in,out]diskAngle pi/12 SFBool[out]isActive SFBool[out]isOver SFVec3f[out]trackPoint_changed SFRotation[out]rotation_changed... } x y z x y z diskAngle
Esercizio Utilizzo del nodo SphereSensor per ruotare un oggetto Creazione di un cubo Creazione di un cubo e di un sensore sphereSensor ad esso associato Routing dellevento <ROUTE fromNode="sensor" fromField="rotation_changed" toNode="boxTransform" toField="set_rotation"/>
Definizione di nuovi nodi E possibile definire nuovi tipi di nodo a partire da nodi esistenti (built-in o definiti dallutente) PROTOTYPE –Nome –Interfaccia –Corpo Zero o più campi: –Nome –Tipo –Tipo di accesso (input/output per il routing degli eventi) –Valori di default Uno o più nodi: –Deve esistere un nodo radice –Il nodo radice determina quando il prototipo può essere istanziato A differenza di USE il prototipo può possedere dei campi il cui valore può variare per ogni istanza
colore Esempio di prototipo Prototipo Colonna caratterizzato da un colore e un raggio Transform · · · Shape geometry · · · Appearance · · · appearance Cylinder radius · · · Material diffuseColor · · · children material raggio Colonna
Prototipi (1) Codifica in XML della dichiarazione di prototipi <field name=... type=... accessType=... value=.../> Interfaccia costituita da campi <connect nodeField=... protoField=.../> Corpo costituito da dichiarazioni di nodi - Il collegamento tra i campi dei nodi e i campi dellinterfaccia avviene attraverso i tag e
Prototipi (2) Codifica in XML della creazione di istanze di un prototipo... Lista dei valori dei campi Se il valore di un campo non viene specificato esso assume il valore di default (specificato nellinterfaccia o in base alle specifiche X3D)
Prototipi: esempio <field name="raggio" accessType="inputOutput" type="SFFloat" value="0.3"/> <field name="colore" accessType="inputOutput" type="SFColor" value=" "/>