massimiliano piscozzi – macx.p@tiscali.it sistemi multimediali
Post on 02-May-2015
251 Views
Preview:
TRANSCRIPT
Massimiliano Piscozzi – macx.p@tiscali.it
Sistemi multimediali
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
XML
Scene graph
Node A
Node B
Node C
Node D
Node E 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
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 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"?>
<!DOCTYPE Rubrica SYSTEM "C:/rubrica.dtd">
<Rubrica>
<Persona>
<Nome> Marco </Nome>
<Telefono> 339-1111111 </Telefono>
<Email> marco@provider.it </Email>
</Persona>
<Persona>
<Nome> Chiara </Nome>
<Telefono> 339-2222222 </Telefono>
<Email/>
</Persona>
</Rubrica>
• 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
<?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="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>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Rubrica SYSTEM "C:/rubrica.dtd">
<Rubrica>
<Persona>
<Nome> Marco </Nome>
<Telefono> 339-1111111 </Telefono>
<Email> marco@provider.it </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: 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
<Transform>
<Shape>
<Cylinder/>
<Appearance>
<Material diffuseColor="1.0 0.4 0.0"/>
</Appearance>
</Shape>
</Transform>
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 0 0 0
SFVec3f [in,out] translation 0 0 0
SFRotation [in,out] rotation 0 0 1 0
SFVec3f [in,out] scale 1 1 1
SFRotation [in,out] scaleOrientation 0 0 1 0
...
}
Transformchildren
addChildren
removeChildren
center
rotation
translation
scale
scaleOrientation
· · ·
Nodo Transform (2)
<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>
Transform : X3DGroupingNode {
MFNode [in,out] children [] [X3DChildNode]
MFNode [in] addChildren [X3DChildNode]
MFNode [in] removeChildren [X3DChildNode]
SFVec3f [in,out] center 0 0 0
SFVec3f [in,out] translation 0 0 0
SFRotation [in,out] rotation 0 0 1 0
SFVec3f [in,out] scale 1 1 1
SFRotation [in,out] scaleOrientation 0 0 1 0
...
}
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 : X3DShapeNode {
SFNode [in,out] geometry NULL [X3DGeometryNode]
SFNode [in,out] appearance NULL [X3DAppearanceNode]
...
}
Shapegeometry
appearance
· · ·
<Shape
DEF = “”
USE = “”
...
>– Un nodo discendente da
X3DGeometryNode (campo geometry)– Un nodo discendente da
X3DAppearanceNode (campo appearance)
</Shape>
Nodo Appearance
Appearance : X3DAppearanceNode{
SFNode [in,out] material NULL [X3DMaterialNode]
SFNode [in,out] texture NULL [X3DTextureNode]
SFNode [in,out] textureTransform 0 0 1 0 [X3DTextureTransformNode]
...
}
Appearancematerial
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)
</Appearance>
Nodo Material (1)
Material : X3DMaterialNode{
SFFloat [in,out] ambientIntensity 0.2
SFColor [in,out] diffuseColor 0.8 0.8 0.8
SFColor [in,out] emissiveColor 0 0 0
SFFloat [in,out] shininess 0.2
SFColor [in,out] specularColor 0 0 0
SFFloat [in,out] transparency 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>
MaterialambientIntensity
diffuseColor
emissiveColor
shininess
specularColor
transparency
· · ·
Nodo Material (2)
diffuseColorRiflette la luce in base all’angolo tra la
superficie e la sorgente luminosa
specularColorRiflette la luce in base
all’angolo tra la sorgente
luminosa e la direzione
di osservazione
shininessAmpiezza del riflesso
emissiveColor Colore della luce
emessa dall’oggetto 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 2 2 2
SFBool [] solid TRUE
...
}
Cone : X3DGeometryNode{
SFFloat [] bottomRadius 1
SFFloat [] height 2
SFBool [] bottom TRUE
SFBool [] side TRUE
SFBool [] solid TRUE
...
}
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 [] bottom TRUE
SFBool [] top TRUE
SFBool [] side TRUE
SFBool [] solid TRUE
...
}
Sphere : X3DGeometryNode{
SFFloat [] radius 1
SFBool [] solid TRUE
...
}
top related