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
–
–
–
–
–
&
<
>
‘
“





&amp;
&lt;
&rt;
&apos;
&quot;
• 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