Transcript Slide 1
Sistemi multimediali Massimiliano Piscozzi – [email protected] Links utili • Web 3D Consortium – Specifiche ed esempi: www.web3d.org • Viewers e plugin – Windows • • • • Octagon Free Player: www.octaga.com BS Contact VRML 6.1: www.bitmanagement.de OpenWorlds: www.openworlds.com Flux v.1.1.: www.mediamachines.com – Linux • FreeWrl: freewrl.sourceforge.net Octagon Free player e Bs Contact VRML 6.1 consigliati Riassunto lezione precedente X3D/VRML files, streams Node A Node D XML Node B Node E Node C Scene graph Node F Node G Struttura del corso Introduzione a X3D Architettura interna di X3D Presentazione degli oggetti principali che compongono una scena X3D e corrispondente codifica in XML Creazione al computer di scene X3D Utilizzo del software X3D-Edit Componenti, profili Componente • Insieme di oggetti X3D e servizi che forniscono delle funzionalità fra loro collegate – Ex: Rendering component, Sound component, Scripting component • Specifica uno o più livelli qualità dei servizi Profilo • Insieme di funzionalità e requisiti che devono essere supportati affinché un’implementazione sia conforme a tale profilo – Ex: Core profile, Interactive profile, Full profile • Definito come un insieme di componenti e di corrispondenti livelli Profili NURBS BaseVRML97 Interactive Interchange Text Extrusion Switch Sensor Spot light Script, PROTO Key Sensor Extensible Full Struttura astratta di X3D • Header (dipendente dalla codifica utilizzata): – Identificazione dello standard supportato (“X3D”) – Identificazione del sistema di codifica dei caratteri (“UTF-8”) • Dichiarazione del profilo • Dichiarazione dei componenti aggiuntivi (opzionale) • Dichiarazione dei metadata (opzionale) – Non modificano lo scene graph – Specificano informazioni aggiuntive • Lista di dichiarazioni per la creazione e l’organizzazione dei nodi nello scene graph Esempio di 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> <meta name="filename" content="SimpleTest.x3d"/> <meta name="description" content="semplice esempio"/> <meta name="created" content="25 aprile 2004"/> </head> <Scene> <Transform> <Shape> <Cylinder/> <Appearance> <Material diffuseColor="1.0 0.4 0.0"/> </Appearance> </Shape> </Transform> </Scene> </X3D> Dichiarazione XML, codifica caratteri File DTD necessario per la codifica XML Profilo Metadata Tag <Scene> che racchiude tutte le dichiarazioni necessarie a creare oggetti nello scene graph XML • Linguaggio di marcatura (mark-up language) aperto e basato su testo (XML: eXtensible Markup Language) • Fornisce informazioni di tipo strutturale e semantico relative ai dati veri e propri <?xml version="1.0" encoding="UTF-8"?> • E’ un metalinguaggio che permette di creare dei linguaggi di markup personalizzati • DTD: insieme di regole che stabiliscono rigorosamente la struttura di un tipo di documento <!DOCTYPE Rubrica SYSTEM "C:/rubrica.dtd"> <Rubrica> <Persona> <Nome> Marco </Nome> <Telefono> 339-1111111 </Telefono> <Email> [email protected] </Email> </Persona> <Persona> <Nome> Chiara </Nome> <Telefono> 339-2222222 </Telefono> <Email/> </Persona> </Rubrica> XML: tipi di documento <?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE X3D PUBLIC "http://www.web3d.org/x3d/content/x3d-3.0.dtd"> <!DOCTYPE Rubrica SYSTEM "C:/rubrica.dtd"> <Rubrica> <X3D profile="Full"> <head> <meta name="filename" content="SimpleTest.x3d"/> <meta name="description" content="Simple X3D example"/> <meta name="created" content="25 aprile 2004"/> </head> <Scene> <Transform> <Shape> <Cylinder/> <Appearance> <Material diffuseColor="1.0 0.4 0.0"/> </Appearance> </Shape> </Transform> </Scene> </X3D> <Persona> <Nome> Marco </Nome> <Telefono> 339-1111111 </Telefono> <Email> [email protected] </Email> </Persona> <Persona> <Nome> Chiara </Nome> <Telefono> 339-2222222 </Telefono> <Email/> </Persona> </Rubrica> XML: sintassi (1) • Tutti i tag devono essere racchiusi in un tag radice • Tutti i tag devono chiudersi – Tag di apertura e chiusura: <tag>...</tag> – Tag vuoto: <tag/> • I tag sono case sensitive – <myTag> e <MYTAG> non sono equivalenti • I valori degli attributi devono essere racchiusi da virgolette – <myTag height=“5” description=“BlaBlaBla”> • I tag devono essere corretamente innestati fra loro – Corretto: <firstTag><secondTag>...</secondTag></firstTag> – Non corretto: <firstTag><secondTag>...</firstTag></secondTag> XML: sintassi (2) • Caratteri speciali – – – – – & < > ‘ “ & < &rt; ' " • Commenti compresi fra i tag <!-- e --> – <!-- Questo è un commento --> • CDATA compresi fra i tag <![CDATA[ e ]]> – <![CDATA[ Testo non analizzato dal parser “XML” ]]> Nodi principali <Transform> <Shape> <Cylinder/> <Appearance> <Material diffuseColor="1.0 0.4 0.0"/> </Appearance> </Shape> </Transform> • Transform: crea un sistema di coordinate locale per operare delle trasformazioni geometriche • Shape: crea una forma composta da un oggetto geometrico e da un aspetto • Cylinder: una delle varie primitive geometriche • Material: definizione delle proprietà della superficie Nodo Transform (1) Transform : X3DGroupingNode { MFNode [in,out] children MFNode [in] addChildren MFNode [in] removeChildren SFVec3f [in,out] center SFVec3f [in,out] translation SFRotation [in,out] rotation SFVec3f [in,out] scale SFRotation [in,out] scaleOrientation ... } Transform [] 000 000 0010 111 0010 [X3DChildNode] [X3DChildNode] [X3DChildNode] children addChildren removeChildren center rotation translation scale scaleOrientation ·· · • Definisce un sistema di coordinate locale per i nodi contenuti in children • Effettua una trasformazione geometrica data da: – Un ridimensionamento (anche non-uniforme) rispetto ad un punto arbitrario – Una rotazione rispetto ad un asse e ad un punto arbitrari – Una traslazione Nodo Transform (2) Transform : X3DGroupingNode { MFNode [in,out] children MFNode [in] addChildren MFNode [in] removeChildren SFVec3f [in,out] center SFVec3f [in,out] translation SFRotation [in,out] rotation SFVec3f [in,out] scale SFRotation [in,out] scaleOrientation ... } [] 000 000 0010 111 0010 [X3DChildNode] [X3DChildNode] [X3DChildNode] <Transform DEF = “” USE = “” center = “0 0 0” translation = “0 0 0” rotation = “0 0 1 0” scale = “1 1 1” scaleOrientation = “0 0 1 0” ... > – Nodi discendenti da X3DChildNode (campo children) </Transform> Regole generali: • I campi di tipo SFNode o MFNode sono compresi tra il tag di apertura e quello di chiusura • Tutti gli altri campi sono definiti come attributi del tag • Gli attributi DEF e USE permettono di attribuire un nome al nodo e di instanziarlo successivamente Esempio <Transform translation=“-2 0 0”> <Transform DEF=“Cilindro Ruotato” rotation=“0 0 1 0.78”> <Shape> <Cylinder/> <Appearance> <Material diffuseColor=“1.0 0.4 0.0”/> </Appearance> </Shape> </Transform> </Transform> <Transform translation=“2 0 0”> <Transform USE=“Cilindro Ruotato”/> </Transform> Cilindro Ruotato Cilindro Ruotato Nodo Shape Shape Shape : X3DShapeNode { SFNode [in,out] geometry SFNode [in,out] appearance ... } geometry NULL NULL [X3DGeometryNode] [X3DAppearanceNode] <Shape DEF = “” USE = “” ... > – Un nodo discendente da X3DGeometryNode (campo geometry) – Un nodo discendente da X3DAppearanceNode (campo appearance) </Shape> appearance ·· · Nodo Appearance Appearance Appearance : X3DAppearanceNode{ SFNode [in,out] material NULL SFNode [in,out] texture NULL SFNode [in,out] textureTransform 0 0 1 0 ... } material [X3DMaterialNode] [X3DTextureNode] [X3DTextureTransformNode] <Appearance DEF = “” USE = “” ... > – Un nodo discendente da X3DMaterialNode (campo material) – Un nodo discendente da X3DTextureNode (campo texture) – Un nodo discendente da X3DTextureTransformNode (campo textureTransform) </Appearance> texture textureTransform ·· · Nodo Material (1) Material : X3DMaterialNode{ SFFloat [in,out] ambientIntensity SFColor [in,out] diffuseColor SFColor [in,out] emissiveColor SFFloat [in,out] shininess SFColor [in,out] specularColor SFFloat [in,out] transparency ... } Material 0.2 0.8 0.8 0.8 000 0.2 000 0 <Material DEF = “” USE = “” ambientIntensity = “0.2” diffuseColor = “0.8 0.8 0.8” emissiveColor = “0 0 0” shininess = “0.2” specularColor = “0 0 0” transparency = “0” ... > </Material> ambientIntensity diffuseColor emissiveColor shininess specularColor transparency ·· · Nodo Material (2) diffuseColor Riflette la luce in base all’angolo tra la superficie e la sorgente luminosa specularColor Riflette la luce in base all’angolo tra la sorgente luminosa e la direzione di osservazione emissiveColor shininess Colore della luce emessa dall’oggetto stesso Ampiezza del riflesso ambientIntensity Fattore moltiplicativo del colore speculare (dipende dal numero di luci, non dalla loro posizione) Primitive geometriche (1) • Semplici forme geometriche derivate dal nodo X3DGeometryNode e utilizzabili nel nodo Shape: Box : X3DGeometryNode{ SFVec3f [] size SFBool [] solid ... } Cone : X3DGeometryNode{ SFFloat [] bottomRadius SFFloat [] height SFBool [] bottom SFBool [] side SFBool [] solid ... } 222 TRUE 1 2 TRUE TRUE TRUE Primitive geometriche (2) Cylinder : X3DGeometryNode{ SFFloat [] height SFFloat [] radius SFBool [] bottom SFBool [] top SFBool [] side SFBool [] solid ... } Sphere : X3DGeometryNode{ SFFloat [] radius SFBool [] solid ... } 2 1 TRUE TRUE TRUE TRUE 1 TRUE • Tutti i nodi discendenti da X3DGeometryNode hanno un campo solid (SFBool) • I campi sono tutti di tipo InitializeOnly