Massimiliano Piscozzi – Sistemi multimediali
Links utili Web 3D Consortium –Specifiche ed esempi: Viewers e plugin –Windows Octagon Free Player: BS Contact VRML 6.1: OpenWorlds: Flux v.1.1.: –Linux FreeWrl: freewrl.sourceforge.net Octagon Free player e Bs Contact VRML 6.1 consigliati
Riassunto lezione precedente X3D/VRML files, streams XML Scene graph Node A Node B Node C Node D Node ENode 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é unimplementazione sia conforme a tale profilo –Ex: Core profile, Interactive profile, Full profile Definito come un insieme di componenti e di corrispondenti livelli
Profili Full BaseVRML97 Interactive Extensible Interchange Script, PROTO NURBS Text Extrusion Key Sensor Switch Sensor Spot light
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 lorganizzazione dei nodi nello scene graph
Esempio di file X3D-XML <!DOCTYPE X3D PUBLIC " Dichiarazione XML, codifica caratteri File DTD necessario per la codifica XML Profilo Metadata Tag 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 Marco Chiara 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
XML: tipi di documento <!DOCTYPE X3D PUBLIC " Marco Chiara
XML: sintassi (1) Tutti i tag devono essere racchiusi in un tag radice Tutti i tag devono chiudersi –Tag di apertura e chiusura:... –Tag vuoto: I tag sono case sensitive – e non sono equivalenti I valori degli attributi devono essere racchiusi da virgolette – I tag devono essere corretamente innestati fra loro –Corretto:... –Non corretto:...
XML: sintassi (2) Caratteri speciali –& & –< < –> &rt; – ' – " Commenti compresi fra i tag – CDATA compresi fra i tag –<![CDATA[ Testo non analizzato dal parser XML ]]>
Nodi principali 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) 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 Transform : X3DGroupingNode { MFNode [in,out] children [] [X3DChildNode] MFNode[in] addChildren [X3DChildNode] MFNode [in] removeChildren [X3DChildNode] SFVec3f [in,out] center SFVec3f [in,out] translation SFRotation [in,out] rotation SFVec3f [in,out] scale SFRotation [in,out] scaleOrientation } Transform children addChildren removeChildren center rotation translation scale scaleOrientation · · ·
Nodo Transform (2) <Transform DEF = USE = center = translation = rotation = scale = scaleOrientation = > –Nodi discendenti da X3DChildNode (campo children) Transform : X3DGroupingNode { MFNode [in,out] children [] [X3DChildNode] MFNode[in] addChildren [X3DChildNode] MFNode [in] removeChildren [X3DChildNode] SFVec3f [in,out] center SFVec3f [in,out] translation SFRotation [in,out] rotation SFVec3f [in,out] scale SFRotation [in,out] scaleOrientation } 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 DEF=Cilindro Ruotato rotation= > Cilindro Ruotato Cilindro Ruotato
Nodo Shape Shape : X3DShapeNode { SFNode [in,out] geometry NULL[X3DGeometryNode] SFNode [in,out] appearance NULL[X3DAppearanceNode]... } Shape geometry appearance · · · <Shape DEF = USE =... > –Un nodo discendente da X3DGeometryNode (campo geometry) –Un nodo discendente da X3DAppearanceNode (campo appearance)
Nodo Appearance Appearance : X3DAppearanceNode{ SFNode [in,out] material NULL[X3DMaterialNode] SFNode [in,out] texture NULL[X3DTextureNode] SFNode [in,out] textureTransform [X3DTextureTransformNode]... } Appearance material texture textureTransform · · · <Appearance DEF = USE =... > –Un nodo discendente da X3DMaterialNode (campo material) –Un nodo discendente da X3DTextureNode (campo texture) –Un nodo discendente da X3DTextureTransformNode (campo textureTransform)
Nodo Material (1) Material : X3DMaterialNode{ SFFloat [in,out] ambientIntensity 0.2 SFColor [in,out] diffuseColor SFColor [in,out] emissiveColor SFFloat[in,out]shininess0.2 SFColor[in,out]specularColor0 0 0 SFFloat[in,out]transparency0... } <Material DEF = USE = ambientIntensity = 0.2 diffuseColor = emissiveColor = shininess = 0.2 specularColor = transparency = 0... > Material ambientIntensity diffuseColor emissiveColor shininess specularColor transparency · · ·
Nodo Material (2) diffuseColor Riflette la luce in base allangolo tra la superficie e la sorgente luminosa specularColor Riflette la luce in base allangolo tra la sorgente luminosa e la direzione di osservazione shininess Ampiezza del riflesso emissiveColor Colore della luce emessa dalloggetto stesso 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 TRUE... } Cone : X3DGeometryNode{ SFFloat [] bottomRadius 1 SFFloat [] height 2 SFBool[]bottomTRUE SFBool[]sideTRUE SFBool[]solidTRUE... }
Primitive geometriche (2) Tutti i nodi discendenti da X3DGeometryNode hanno un campo solid (SFBool) I campi sono tutti di tipo InitializeOnly Cylinder : X3DGeometryNode{ SFFloat [] height 2 SFFloat [] radius 1 SFBool[]bottomTRUE SFBool[]topTRUE SFBool[]sideTRUE SFBool[]solidTRUE... } Sphere : X3DGeometryNode{ SFFloat [] radius 1 SFBool [] solidTRUE... }