Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
1
Massimiliano Piscozzi – piscozzi@dico.unimi.it
Sistemi multimediali Massimiliano Piscozzi –
2
Esercizio (1) Animazione (in contemporanea) della rotazione di un parallelepipedo, del colore di una sfera e della traslazione di un cono OrientationInterp. set_fraction · · · key keyValue value_changed Transform rotation · · · ColorInterpolator set_fraction · · · key keyValue value_changed TimeSensor cycleInterval Material loop diffuseColor · · · fraction_changed · · · PositionInterp. set_fraction · · · key keyValue value_changed Transform translation · · ·
3
Esercizio (2) Creazione dei tre oggetti distribuiti lungo l’asse X
<Transform translation="-3 0 0"> <Transform DEF="boxTransform"> <Shape> <Box size="1 3 1"/> <Appearance> <Material diffuseColor="1 0 0"/> </Appearance> </Shape> </Transform> <Transform> <Shape> <Sphere radius="1"/> <Appearance> <Material DEF="sphereMaterial" diffuseColor="1 0 1"/> </Appearance> </Shape> </Transform> <Transform translation="3 0 0"> <Transform DEF="coneTransform"> <Shape> <Cone bottomRadius="1" height="2"/> <Appearance> <Material diffuseColor="0 0 1"/> </Appearance> </Shape> </Transform> Creazione di un TimeSensor <TimeSensor DEF="timer" cycleInterval="4" loop="true"/>
4
Esercizio (3) 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"/>
5
TouchSensor Rileva quando l’utente “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] enabled TRUE SFVec3f [out] hitNormal_changed SFVec3f [out] hitPoint_changed SFVec3f [out] hitTexCoord_changed SFBool [out] isActive SFBool [out] isOver SFTime [out] touchTime ... }
6
Esercizio Spostamento di una piccola sfera sulla superficie di un cono
Creazione della sfera <Transform DEF="sphereTransform"> <Shape> <Sphere radius="0.1"/> <Appearance> <Material diffuseColor="0 0 1"/> </Appearance> </Shape> </Transform> Creazione del cono e del sensore <Transform> <Shape> <Cone bottomRadius="1" height="3"/> <Appearance> <Material diffuseColor="1 0 0"/> </Appearance> </Shape> <TouchSensor DEF="sensor"/> </Transform> Routing dell’evento <ROUTE fromNode="sensor" fromField="hitPoint_changed" toNode="sphereTransform" toField="set_translation"/>
7
Esercizio (1) Creazione di un pulsante per far apparire un oggetto Transform children · · · Material diffuseColor · · · TouchSensor . . . touchTime · · · TimeSensor ScalarInterpolator set_fraction · · · key keyValue value_changed cycleInterval loop startTime fraction_changed · · ·
8
Esercizio (2) Creazione del pulsante
<Transform translation="-3 0 0"> <Shape> <Sphere radius="1"/> <Appearance> <Material diffuseColor=" "/> </Appearance> </Shape> <TouchSensor DEF="touchSensor"/> </Transform> Creazione dell’oggetto da far apparire <Transform translation="3 0 0"> <Shape> <Sphere radius="1"/> <Appearance> <Material DEF="sphereMaterial" diffuseColor="1 1 0" transparency="1"/> </Appearance> </Shape> </Transform>
9
Esercizio (3) Creazione del timer Creazione dell’interpolatore
<TimeSensor DEF="timer" cycleInterval="3" loop="false"/> Creazione dell’interpolatore <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"/>
10
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 all’asse Y del sistema di coordinate locali PlaneSensor : X3DDragSensorNode{ SFString [in,out] description “” SFBool [in,out] autoOffset TRUE SFVec3f [in,out] offset 0 0 0 SFBool [in,out] enabled TRUE SFVec2f [in,out] minPosition 0 0 SFVec2f [in,out] maxPosition SFBool [out] isActive SFBool [out] isOver SFVec3f [out] trackPoint_changed SFVec3f [out] translation_changed ... } x y z minPosition maxPosition
11
Altri sensori (2) y x z y x z diskAngle
SphereSensor : X3DDragSensorNode{ SFString [in,out] description “” SFBool [in,out] autoOffset TRUE SFVec3f [in,out] offset 0 0 0 SFBool [in,out] enabled TRUE SFBool [out] isActive SFBool [out] isOver SFVec3f [out] trackPoint_changed SFRotation [out] rotation_changed ... } x y z CylinderSensor : X3DDragSensorNode{ SFString [in,out] description “” SFBool [in,out] autoOffset TRUE SFVec3f [in,out] offset 0 0 0 SFBool [in,out] enabled TRUE SFFloat [in,out] minAngle 0 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 diskAngle
12
Esercizio Utilizzo del nodo SphereSensor per ruotare un oggetto
Creazione di un cubo <Transform translation="3 0 0"> <Shape> <Box size="2 2 2"/> <Appearance> <Material diffuseColor="0 0 1"/> </Appearance> </Shape> </Transform> Creazione di un cubo e di un sensore sphereSensor ad esso associato <Transform translation="-3 0 0"> <Transform DEF="boxTransform"> <Shape> <Box size="2 2 2"/> <Appearance> <Material diffuseColor="1 0 0"/> </Appearance> </Shape> </Transform> <SphereSensor DEF="sensor"/> Routing dell’evento <ROUTE fromNode="sensor" fromField="rotation_changed" toNode="boxTransform" toField="set_rotation"/>
13
Definizione di nuovi nodi
E’ possibile definire nuovi tipi di nodo a partire da nodi esistenti (built-in o definiti dall’utente) 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
14
Esempio di prototipo Prototipo “Colonna” caratterizzato da un colore e un raggio Colonna Transform children · · · Shape geometry appearance · · · raggio Cylinder Appearance radius material · · · · · · colore Material diffuseColor · · ·
15
Prototipi (1) Codifica in XML della dichiarazione di prototipi
<ProtoDeclare name=“nomePrototipo”> <ProtoInterface> ... </ProtoInteface> <ProtoBody> </ProtoBody> </ProtoDeclare> <field name=“...” type=“...” accessType=“...” value=“...”/> Interfaccia costituita da campi <unNodo> <IS> <connect nodeField=“...” protoField=“...”/> </IS> </unNodo> Corpo costituito da dichiarazioni di nodi - Il collegamento tra i campi dei nodi e i campi dell’interfaccia avviene attraverso i tag <IS> e <connect>
16
Prototipi (2) Codifica in XML della creazione di istanze di un prototipo <ProtoInstance name=“nomePrototipo”> ... </ProtoInstance> <fieldValue name=“...” value=“...”/> Lista dei valori dei campi Se il valore di un campo non viene specificato esso assume il valore di default (specificato nell’interfaccia o in base alle specifiche X3D)
17
Prototipi: esempio <ProtoDeclare name="Colonna">
<ProtoInterface> <field name="raggio" accessType="inputOutput" type="SFFloat" value="0.3"/> <field name="colore" accessType="inputOutput" type="SFColor" value=" "/> </ProtoInterface> <ProtoBody> <Transform translation=" "> <Shape> <Cylinder height="2.5"> <IS> <connect nodeField="radius" protoField="raggio"/> </IS> </Cylinder> <Appearance> <Material diffuseColor=" "> <connect nodeField="diffuseColor" protoField="colore"/> </Material> </Appearance> </Shape> </Transform> </ProtoBody> </ProtoDeclare> <ProtoInstance name="Colonna"/> <ProtoInstance name="Colonna"> <fieldValue name="colore" value="0 0 2"/> </ProtoInstance> <fieldValue name="raggio" value="0.1"/>
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.