Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
1
Massimiliano Piscozzi – piscozzi@dico.unimi.it
Sistemi multimediali Massimiliano Piscozzi –
2
Links utili Web 3D Consortium Viewers e plugin
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 Consigli su installazione (ActiveX)
3
Riassunto lezione precedente
X3D/VRML files, streams Node A Node B Node C Node D Node E Node F Node G XML In file .X3D definiamo la scena virtuale attraverso una serie di istruzioni dichiarative; esse sono codificate in XML e permettono di creare gli oggetti nello scene graph e di organizzarli fra loro Abbiamo 3 nodi radice.... DAG Transformation hierarchy Connessioni tra campi (non distinguibili nello schema) Le connessioni fra campi settate in modo opportuno definiscono dei comportamenti nella scena virtuale Scene graph
4
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
5
Componenti, profili Componente Profilo
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 Abbiamo finora parlato di oggetti.. Vediamo come sono organizzati fra loro (oggetti di vari tipi, ma alcuni hanno caratteristiche comuni) Profile: conforme ricordiamoci che X3D è uno standard che può essere implementato in modi diversi ciò permette implementazioni incrementali I profili vanno specificati anche nei nostri file X3D
6
Profili BaseVRML97 Interchange Interactive Extensible Full0x NURBS
Text Extrusion Switch Sensor Spot light Script, PROTO Key Sensor Extensible Full0x
7
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 Mondo X3D concettualmente organizzato nel seguente modo Saranno le parti che identificheremo in un file X3D e che andremo a scrivere creando un nostro file X3D
8
Esempio di file X3D-XML Dichiarazione XML, codifica caratteri
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE X3D PUBLIC " <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=" "/> </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 Non aspettatevi riga per riga quello che ho detto prima.... ANALISI XML!!!!
9
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"?> <!DOCTYPE Rubrica SYSTEM "C:/rubrica.dtd"> <Rubrica> <Persona> <Nome> Marco </Nome> <Telefono> </Telefono> < > </ > </Persona> <Nome> Chiara </Nome> <Telefono> </Telefono> < /> </Rubrica> 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
10
XML: tipi di documento <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC " <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=" "/> </Appearance> </Shape> </Transform> </Scene> </X3D> <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE Rubrica SYSTEM "C:/rubrica.dtd"> <Rubrica> <Persona> <Nome> Marco </Nome> <Telefono> </Telefono> < > </ > </Persona> <Nome> Chiara </Nome> <Telefono> </Telefono> < /> </Rubrica>
11
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>
12
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” ]]>
13
Nodi principali <Transform> <Shape> <Cylinder/> <Appearance> <Material diffuseColor=" "/> </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 Transform: per adesso nessuna traformazione; utile racchiudere in un transform ogni oggetto geometrico che si vuole gestire independentemente
14
Nodo Transform (1) 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 · · · Esaminare nei dettagli la specifica: SF... MF... Valori iniziali, campi solo input come eventi in entrata, interfacce astratte ScaleOrientation di tipo Rotation La presenza di un attributo del tipo SFNode o MFNode indica che questo nodo sarà padre di altri nodi 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
15
Nodo Transform (2) Regole generali:
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 DEF = “” USE = “” center = “0 0 0” translation = “0 0 0” rotation = “ ” scale = “1 1 1” scaleOrientation = “ ” ... > Nodi discendenti da X3DChildNode (campo children) </Transform> Esaminare nei dettagli la specifica: SF... MF... Valori iniziali, campi solo input come eventi in entrata, interfacce astratte ScaleOrientation di tipo Rotation La presenza di un attributo del tipo SFNode o MFNode indica che questo nodo sarà padre di altri nodi 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
16
Esempio <Transform translation=“-2 0 0”>
<Transform DEF=“Cilindro Ruotato” rotation=“ ”> <Shape> <Cylinder/> <Appearance> <Material diffuseColor=“ ”/> </Appearance> </Shape> </Transform> <Transform translation=“2 0 0”> <Transform USE=“Cilindro Ruotato”/> Cilindro Ruotato Cilindro Ruotato ATTENZIONE!!!! Ho usato due Transform per poterne riutilizzare una... In questo caso avrei potuto anche utilizzarne una sola perché l’ordine delle trasformazioni corrisponde a quello desiderato, ma non è sempre così!!!!
17
Nodo Shape 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) X3DAppearanceNode (campo appearance) </Shape> Dire che inserire più di un nodo di un tipo tra i tag genera errore!!!! Campo SF.. e non MF..!!!!
18
Nodo Appearance 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) X3DTextureNode (campo texture) X3DTextureTransformNode (campo textureTransform) </Appearance>
19
Nodo Material (1) Material Material : X3DMaterialNode{
SFFloat [in,out] ambientIntensity 0.2 SFColor [in,out] diffuseColor SFColor [in,out] emissiveColor SFFloat [in,out] shininess 0.2 SFColor [in,out] specularColor 0 0 0 SFFloat [in,out] transparency 0 ... } Material ambientIntensity diffuseColor emissiveColor shininess specularColor transparency · · · <Material DEF = “” USE = “” ambientIntensity = “0.2” diffuseColor = “ ” emissiveColor = “0 0 0” shininess = “0.2” specularColor = “0 0 0” transparency = “0” ... > </Material>
20
Nodo Material (2) diffuseColor specularColor shininess emissiveColor
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 Determina l’ampiezza del riflesso emissiveColor Colore dato da una auto-illuminazione dell’oggetto stesso (indipendente dalle sorgenti luminose) ambientIntensity Fattore moltiplicativo del colore (indipendente dalla posizione delle fonti luminose)
21
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 [] bottom TRUE SFBool [] side TRUE SFBool [] solid TRUE ... } È importante capire il posizionamento rispetto agli assi
22
Primitive geometriche (2)
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 ... } È importante capire il posizionamento rispetto agli assi Campo solid: se TRUE i poligono si vedono solo in direzione della normale Dato che i campi sono di tipo InputOnly si agirà su Transform per variarne le dimensioni!!!!!!!!!!!!! Esempio!!!!!!!!!!! Commento su PivotPoint Introduzione a NavigationInfo e Viewpoint Tutti i nodi discendenti da X3DGeometryNode hanno un campo solid (SFBool) I campi sono tutti di tipo InitializeOnly
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.