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
Scarica

Shape