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
–
–
–
–
–
&
<
>
‘
“





&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
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
Scarica

pps - Home di