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 fornisce 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 Full0x 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 • 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"> Dichiarazione XML, codifica caratteri File DTD necessario per la codifica XML Profilo <head> <meta name="filename" content="SimpleTest.x3d"/> <meta name="description" content="Simple X3D example"/> <meta name="created" content="25 aprile 2004"/> </head> Metadata <Scene> <Transform> <Shape> <Cylinder/> <Appearance> <Material diffuseColor="0.6 0.3 0.1"/> </Appearance> </Shape> </Transform> </Scene> Tag <Scene> che racchiude tutte le dichiarazioni necessarie a creare oggetti nello scene graph </X3D> XML • Linguaggio di marcatura (mark-up language) aperto e basato su testo • 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 linuaggi 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="0.6 0.3 0.1"/> </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 Dipendente dall’angolo tra la normale e il raggio luminoso incidente specularColor Dipendente dall’angolo tra la direzione dello sguardo e il raggio luminoso riflesso shininess emissiveColor Determina l’ampiezza del riflesso Colore dato da una auto-illuminazione dell’oggetto stesso (indipendente dalle sorgenti luminose) ambientIntensity Fattore moltiplicativo del colore (indipendente dalla posizione delle fonti luminose) 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