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 1 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 2 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 3 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 4 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 5 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 6 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 7 Componenti VRML - header • 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 8 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 9 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 Appearance Cylinder Material ElevationGrid FontStyle ImageTexture IndexedFaceSet Fabio Massacci - Forma Apparenza Cilindro Materiale CurveDiLivello StileCarattere TessituraImmagine InsiemeDiFacceIndicizzate Programmazione ad Oggetti 10 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 11 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 material radius coordIndex diffuseColor fontStyle textureTransform Fabio Massacci - altezza materiale raggio indiceCoordinate coloreRifratto stileCarattere trasformazioneTessitura Programmazione ad Oggetti 12 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 { Cylinder { height 2.0 radius 1.5 radius 1.5 height 2.0 } Fabio Massacci Programmazione} ad Oggetti 13 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 14 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 15 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 16 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 17 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 18 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 19 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 20 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 21 Cilindro in VRML #VRML V2.0 utf8 # A cylinder geometry Cylinder { height 2.0 radius 1.5 } } Fabio Massacci Programmazione ad Oggetti 22 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 23 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 24 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 25 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 Cylinder { radius 0.4 Cylinder { radius 0.3 Cylinder { radius 0.1 Fabio Massacci height 0.05 } height 2.0 } height 3.0 } height 6.0 } Programmazione ad Oggetti 26 Molteplicità di Oggetti (cont) #VRML V2.0 utf8 Shape { geometry Box { size 1.0 1.0 1.0 } } Shape { geometry Sphere { radius 0.7 } } ... Fabio Massacci Programmazione ad Oggetti 27