Fabio Massacci Programmazione ad Oggetti Fondamenti di Informatica per Ingegneria Prof. Ing. Fabio Massacci (A-L) Ing. Enrico Blanzieri (M-Z) Lezione 5 Dip. di Informatica e Telecomunicazioni Università di Trento Fabio Massacci Programmazione ad Oggetti
Linguaggi Rappresentazione Grafici Rappresenta forme/ambienti interattivi 3D Descrive oggetti geometrici Descrive relazioni (temporali/animazione) tra essi VRML = Virtual Reality Modeling Language Semantica dei file con estensione .wrl Editor di testo = mostra linguaggio VRML Browser = interpreta linguaggio = costruisce oggetti grafici VRML helper-application VRML plug-in di browser HTML (IE, Netscape, Opera) Fabio Massacci Programmazione ad Oggetti
Scrivere Linguaggi Grafici Costruzione di file VRML editor di testi flessibile, controllo dettagliato ma lungo e difficile applicazione ad-hoc (world builder) con interfaccia grafica facile ma può produrre VRML non efficiente modellatore 3D (interfaccia grafica) e trasformazione facile ma non reversibile e VRML non sempre efficiente programmi utente che generano forme opportune AutoCAD esempio di modellatore 3D statico Fabio Massacci Programmazione ad Oggetti
Generatori/Visualizzatori VRML Editing di file VRML Editor di testo: Notepad/Wordpad Editor specializzato VRMLpad (Parallel Graphics) - Aula A1 Internet Space Builder (Parellel Graphics) - Aula A1 incorpora anche file AutoCAD Visualizzazione di file VRML Plug-in di IE e Netscape (Cosmo Player - Cortona) - Internet Internet Space Builder (Parellel Graphics) - Aula A1 Altri visualizzatori/editor VRML http://www.vrml.org Fabio Massacci Programmazione ad Oggetti
Rappresentare Oggetti in VRML File VRML descrive un mondo Sistema di assi cartesiani X/Y/Z Tutti gli oggetti sono costruiti nel sistema di assi cartesiani Default: oggetti centrati nell’origine Fabio Massacci Programmazione ad Oggetti
Fabio Massacci Programmazione ad Oggetti Componenti VRML File header informazioni per l’interprete (versione/codifica/etc) Commenti Nodi (Node) Oggetti fisici (Cubi, Sfere, Superfici) o matematici (orologio, funzione che descrive il movimento) etc. Campi (Fields) per ogni nodo Attributi di ciascun oggetto/nodo (dimensione, colore, parti) Valori (Values) per ciascun campo Valori di un attributi: numeri, coppie e triple (coordinate XYZ), vettori, altri oggetti fisici o matematici Fabio Massacci Programmazione ad Oggetti
Fabio Massacci Programmazione ad Oggetti Esempio di file VRML #VRML V2.0 utf8 # Commento: un bel cilindro # di altezza 2m e raggio 1.5m Shape { appearance ... geometry Cylinder { height 2.0 radius 1.5 } Fabio Massacci Programmazione ad Oggetti
Componenti VRML - header #VRML V2.0 utf8 #VRML: il file contiene testo VRML V2.0: il testo è conforme alla sintassi della versione 2.0 utf8: il testo usa i caratteri UTF8 UTF è un formato di caratteri internazionale utf8 = UCS (Universal Character Set) Transformation Format, 8-bit Codifica oltre 24,000 caratteri di molte lingue Fabio Massacci Programmazione ad Oggetti
Fabio Massacci Programmazione ad Oggetti Componenti VRML - Nodi Nodo - descrive oggetti, forme, luci, suoni ha un tipo (Shape, Cylinder, etc.) delimitato da coppia di parentesi graffe zero o più campi al suo interno (proprietà del nodo) Shape { appearance ... geometry Cylinder { height 2.0 radius 1.5 } Fabio Massacci Programmazione ad Oggetti
Componenti VRML - Nodi (cont) I tipi dei nodi sono case sensitive ogni parola inzia con una maiuscola il resto della parola è in caratteri minuscoli tutto in inglese Esempi Shape - Forma Appearance - Apparenza Cylinder - Cilindro Material - Materiale ElevationGrid - CurveDiLivello FontStyle - StileCarattere ImageTexture - TessituraImmagine IndexedFaceSet - InsiemeDiFacceIndicizzate Fabio Massacci Programmazione ad Oggetti
Componenti VRML - Campi Il Campo/Field è una proprietà del nodo ha un nome (height, radius, etc.) ha un tipo (float, integer, nodo etc.) un valore di default Il valore di default viene utilizzato dall’interprete se non si mette il campo esplicitamente Cylinder { height 2.0 radius 1.5 } Fabio Massacci Programmazione ad Oggetti
Componenti VRML - Campi (cont) I nomi dei campi sono case sensitive la prima parola inzia con una minuscola ogni altra parola inizia con una maiuscola il resto della parola è in caratteri minuscoli tutto in inglese Esempi height - altezza material - materiale radius - raggio coordIndex - indiceCoordinate diffuseColor - coloreRifratto fontStyle - stileCarattere textureTransform - trasformazioneTessitura Fabio Massacci Programmazione ad Oggetti
Componenti VRML - Campi (cont) Ogni nodo ha i suoi campi differenti Cilindro (altezza), Sfera (raggio), Apparenza (coloreRifratto) Tutti i campi sono opzionali un valore di default viene usato se il campo è omesso I campi possono essere in qualsiasi ordine L’ordine non cambia il risultato Ovvio per ling. rappresentazione: descrive il mondo come è Errato per ling. programmazione: descrive cosa fare per cambiare il mondo Cylinder { height 2.0 radius 1.5 } Cylinder { radius 1.5 height 2.0 } Fabio Massacci Programmazione ad Oggetti
VRML - Oggetti Geometrici Shape (Forma) nodo base in VRML Forma geometrica è componente elementare Box (Parallelepipedo) Cone (Cono) Cylinder (Cilindro) Sphere (Sfera) Text (Testo) Testo non è propriamente geometrico ma più semplice considerarlo oggetto elementare Fabio Massacci Programmazione ad Oggetti
VRML - Oggetti Geometrici (cont) Un nodo Shape serve a costruire una forma Campi comuni a tutte le forme appearance - apparenza Include colore e tessitura per ora omesso: default è bianco sporco uniforme geometry - geometria include la forma vera e propria o la struttura Shape { appearance . . . geometry . . . } Fabio Massacci Programmazione ad Oggetti
VRML - Oggetti Geometrici (Sphere) Sfera Forma (Shape) in cui l’attributo geometria (geometry) ha il valore Sphere { ... } Proprietà: radius (raggio) numero reale Shape { geometry Sphere { radius 1.0 } Fabio Massacci Programmazione ad Oggetti
VRML - Oggetti Geometrici (Box) Parallelepipedo (Box) Forma (Shape) in cui l’attributo geometria (geometry) ha il valore Box { ... } Proprietà: size tripla di reali (larghezza, altezza, profondità in metri) Shape { geometry Box { size 2.0 2.0 2.0 } Fabio Massacci Programmazione ad Oggetti
VRML - Oggetti Geometrici (Cone) Cono a punta in alto (Cone) Forma (Shape) in cui l’attributo geometria (geometry) ha il valore Cone { ... } Proprietà: height (altezza), bottomRadius (raggioBase) numeri reali Shape { geometry Cone { height 2.0 bottomRadius 1.0 } Fabio Massacci Programmazione ad Oggetti
VRML - Oggetti Geometrici (Cone) cont Proprietà di base del cono: height, bottomRadius numeri reali Proprietà visuali: bottom (fondo), side (lato) valori booleani: TRUE/FALSE significato: c’è il fondo/c’è la parete laterale del cono bottom TRUE = cono con il fondo visibile bottom FALSE = cono cavo valore di default è TRUE Domanda: se non c’è il lato, che cono è? Un cono invisibile, come un cono d’ombra, ad esempio... Fabio Massacci Programmazione ad Oggetti
VRML - Oggetti Geometrici (Cylinder) Cilindro verticale Forma (Shape) in cui l’attributo geometria (geometry) ha il valore Cylinder { ... } Proprietà: height (altezza), radius (raggio) numeri reali Shape { geometry Cylinder { height 2.0 radius 1.0 } Fabio Massacci Programmazione ad Oggetti
VRML - Oggetti Geom. (Cylinder) cont Proprietà di base del cilindro: height, radius numeri reali Proprietà visuali: bottom (tappo inferiore), side (lato), top (tappo superiore), valori booleani: TRUE/FALSE significato: c’è il fondo/c’è la parete laterale del cilindro/c’è il tappo superiore del cilindro bottom TRUE = cilindro chiuso in fondo top FALSE = cilindro aperto in cima valore di default è TRUE Fabio Massacci Programmazione ad Oggetti
Fabio Massacci Programmazione ad Oggetti Cilindro in VRML #VRML V2.0 utf8 # A cylinder geometry Cylinder { height 2.0 radius 1.5 } Fabio Massacci Programmazione ad Oggetti
VRML - Oggetti Geometrici (Text) Testo Forma (Shape) in cui l’attributo geometria (geometry) ha il valore Text { ... } Proprietà: string (stringa da scrivere), fontStyle lista di stringhe di caratteri (parentesi quadre per delimitare, virgola per andata a capo) Shape { geometry Text { string [ "Text", "Shape" ] } Fabio Massacci Programmazione ad Oggetti
VRML - Oggetti Geom. (Text) cont Proprietà di base del Testo: string lista di stringhe di caratteri Proprietà di formattazione: fontStyle Valore è a sua volta un nodo di tipo FontStyle con proprietà size - altezza (in metri) del carattere spacing - spazio (in metri) tra le righe/colonne horizontal - allineamento orizzontale (TRUE), verticale (FALSE) leftToRight, topToBottom - direzione scrittura (TRUE/FALSE) justify - allineamento con origine degli assi e stringhe (FIRST, BEGIN, MIDDLE, END) family - famiglia di font (SERIF, SANS, TYPEWRITER) style - stile (BOLD, ITALIC, BOLDITALIC, PLAIN) Fabio Massacci Programmazione ad Oggetti
Molteplicità di Oggetti Geometrici Un file VRML può contenere molteplici oggetti Default: ogni oggetto è centrato nell’origine Gli oggetti si sovrappongono quando costruiti nello stesso posto Fabio Massacci Programmazione ad Oggetti
Molteplicità di Oggetti (cont) La nave spaziale è data dalla costruzione di Un cubo Box { size 1.0 1.0 1.0 } Una sfera Sphere { radius 0.7 } Quattro cilindri Cylinder { radius 1.25 height 0.05 } Cylinder { radius 0.4 height 2.0 } Cylinder { radius 0.3 height 3.0 } Cylinder { radius 0.1 height 6.0 } Fabio Massacci Programmazione ad Oggetti
Molteplicità di Oggetti (cont) #VRML V2.0 utf8 Shape { geometry Box { size 1.0 1.0 1.0 } geometry Sphere { radius 0.7 ... Fabio Massacci Programmazione ad Oggetti