massimiliano piscozzi – macx.p@tiscali.it sistemi multimediali

Post on 02-May-2015

251 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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– & &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: 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