Fondamenti di Informatica
per Ingegneria
Prof. Ing. Fabio Massacci (A-L)
Ing. Enrico Blanzieri (M-Z)
Lezione 7
Dip. di Informatica e Telecomunicazioni
Università di Trento
Fabio Massacci
Programmazione ad Oggetti
1
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
Oggetti nella stessa locazione si sovrappongono
parzialmente
Fabio Massacci
Programmazione ad Oggetti
2
Oggetti Geometrici - Trasformazioni
• Rappres. base VRML
– Tutti gli oggetti sono costruiti nel
sistema di assi cartesiani
– Default: oggetti centrati
nell’origine, alto verso l’asse Y,
asse X a destra, faccia verso
l’asse Z (uscente dallo schermo)
• Trasformazioni di Oggetti
– Traslazioni in qualsiasi punto XYZ
– Rotazioni contemporanee su tre assi
– Scalature anche Anamorfiche (differenti proporzioni su
differenti assi
Fabio Massacci
Programmazione ad Oggetti
3
Trasformazioni di Coordinate
• Nodo di tipo Trasform crea nuovo sistema di
coordinate XYZ
– Traslato
– Ruotato
– Scalato
• rispetto al sistema di coord. originario
• Oggetti nel sistema XYZ Trasformato
– sono traslati, ruotati e scalati solidarmente al nuovo sistema
• Intuizione
– costruisco oggetti nell’origine, li rimpicciolisco od
ingrandisco, poi li ruoto, e li sposto nel posto appropriato
Fabio Massacci
Programmazione ad Oggetti
4
Trasformazioni di Coordinate (cont)
• Sintassi VRMLper la Trasformazione
Transform {
translation
rotation
scale
children [
}
.
.
.
.
.
.
.
.
.
.
.
. ]
• translation, rotation, scale: ovvia operazione
• children: tutti gli oggetti a cui applicare la
trasformazione.
• Qualche operazione può essere omessa
Fabio Massacci
Programmazione ad Oggetti
5
Trasformazioni di Coordinate (cont)
• Tra le children sono ammesse ricorsivamente
altre trasform
• La combinazione ricorsiva di due operazioni non
è uguale alla esecuzione contemporanea
Transform {
translation . . .
children [
Shape { . . . }
Shape { . . . }
Transform { . . . }
]
}
Fabio Massacci
Programmazione ad Oggetti
6
Trasformazioni - Traslazioni
• Traslazioni lungo gli assi
Transform {
#lungo asse
X
Y
translation
2.0 0.0
children [ . . . ]
}
Z
-1.5
• Trasla tutti gli oggetti in children
– verso destra lungo l’asse X di 2m
– stessa altezza sull’asse Y
– indietro di 1.5m lungo l’asse Z
Fabio Massacci
Programmazione ad Oggetti
7
Trasformazioni - Traslazioni (codice)
• Traslazioni lungo l’asse X di un cilindro
Transform {
translation
2.0 0.0 0.0
children [
Shape {
geometry Cylinder {
height 2.0
radius 1.0
}
}
]
}
Fabio Massacci
Programmazione ad Oggetti
8
Trasformazioni - Traslazioni (cont)
• Sistema di assi
Iniziale
• Assi traslati di
2.0 lungo asse X
• Oggetto costruito su nuovi assi
Fabio Massacci
Programmazione ad Oggetti
9
Trasformazioni - Rotazioni
• Rotazioni intorno agli assi
Transform {
#lungo asse
X
Y
translation
0.0 0.0
children [ . . . ]
}
Z
1.0
Radianti
0.52
• Ruota tutti gli oggetti in children
– intorno all’asse Z di 0.52 radianti (30 gradi)
• Angoli misurati in radianti
– radians = degrees / 180.0 * 3.141
Fabio Massacci
Programmazione ad Oggetti
10
Trasformazioni - Rotazioni (cont)
• Asse di rotazione definisce un polo intorno a cui
ruotare gli oggetti
– Analogo all’asse Nord/Sud della terra
• Esempi di rotazione tipici di r radianti
– asse X 1.0
– asse Y 0.0
– asse Z 0.0
0.0
1.0
0.0
0.0
0.0
1.0
r
r
r
• Possibili ruotazioni miste (vari numeri non a 0)
– Sconsigliata per novizi: gli essere umani hanno
pessime intuizioni su cosa succede facendo
ruotazioni contemporanee su assi diversi
Fabio Massacci
Programmazione ad Oggetti
11
Trasformazioni - Rotazioni (codice)
• Rotazioni intorno asse Z di un cilindro
Transform {
translation
0.0 0.0 1.0 0.52
children [
Shape {
geometry Cylinder {
height 2.0
radius 1.0
}
}
]
}
Fabio Massacci
Programmazione ad Oggetti
12
Trasformazioni - Rotazioni (cont)
• Sistema di assi
Iniziale
• Assi ruotati di
30g intorno a Z
• Oggetto costruito su nuovi assi
Fabio Massacci
Programmazione ad Oggetti
13
Trasformazioni - Rotazioni (cont)
• Rot. positive in senso antiorario, counterclockwise
• Regola della mano destra
–
–
–
–
aprire la mano
distendere il pollice e puntarlo nella direzione positiva dell’asse
curvare le dita intorno all’asse (come per stringerlo in mano)
la curvatura corrisponde ad una rotazione positiva
Fabio Massacci
Programmazione ad Oggetti
14
Trasformazioni - Scalature
• Scalature lungo agli assi
Transform {
#lungo asse
X
Y
scale
1.0 0.5
children [ . . . ]
}
Z
2.0
• Scala tutti gli oggetti in children
– lascia inalterate le dimensioni lungo l’asse X
– dimezza l’altezza (dim lungo l’asse Y)
– raddoppia la profondità (dim lungo l’asse Z)
• Scalatura Anamorfa (Isomorfa tutti num uguali)
Fabio Massacci
Programmazione ad Oggetti
15
Trasformazioni - Scalature (codice)
• Scalatura Isomorfa di 0.5m in ogni direzione
Transform {
scale
0.5 0.5 0.5
children [
Shape {
geometry Cylinder {
height 2.0
radius 1.0
}
}
]
}
Fabio Massacci
Programmazione ad Oggetti
16
Trasformazioni - Scalature (cont)
• Sistema di assi
Iniziale
• Assi scalati di
metà (0.5) in
ogni dimensione
• Oggetto costruito su nuovi assi
Fabio Massacci
Programmazione ad Oggetti
17
Trasformazioni - Operazioni Multiple
• Scalatura, rotazione e traslazione di un sistema di
coordinate
Transform {
translation
2.0
rotation
0.0
scale
0.5
children [ . . . ]
}
0.0
0.0
0.5
0.0
1.0
0.5
0.52
• I figli sono scalati, ruotati e poi traslati
• L’ordine è fissato, indipendentemente dall’ordine con
cui appaiono
Fabio Massacci
Programmazione ad Oggetti
18
Trasformazioni - Multiple Operaz. (cont)
• Sistema di assi
Iniziale
Fabio Massacci
• Oggetto scalato della metà
• ruotato di 30g
• spostato di 2m lungo l’asse X
Programmazione ad Oggetti
19
Trasformazioni - Multiple (cont)
• Attenzione combinazione di trasformazioni
– aspetti subdoli: rotation+ traslation, scale+traslation
• Scale+Traslation insieme
Palazzo10mVerde {...}
Transform {
translation
20.0 0.0 0.0
scale
0.5 0.5 0.5
children [ Palazzo10mRosso {...} ]
}
• Risultato è un palazzo di 10m verde con affianco, a 20m
di distanza un palazzo di 5m rosso
Fabio Massacci
Programmazione ad Oggetti
20
Trasformazioni - Multiple (cont)
Palazzo10mVerde {...}
Transform {
scale
0.5 0.5 0.5
children [
Transform {
translation
20.0 0.0 0.0
children [ Palazzo10mRosso {...} ]
}
]
}
• Risultato è un palazzo di 10m verde con affianco, a 10m
di distanza (notare scalatura) un palazzo di 5m rosso
Fabio Massacci
Programmazione ad Oggetti
21
Trasformazioni - Multiple (cont)
• Traslazioni e rotazioni abbastanza imprevedibili
• Facile: rotazione e poi traslazione
Palazzo10mVerde {...}
Transform {
traslation
20.0 0.0 0.0
rotation
0.0 1.0 0.0 1.57
children [ Palazzo10mRosso {...} ]
}
• Risultato è un palazzo di 10m verde con affianco, a 20m
di distanza un palazzo di 10m rosso ruotato di 90gradi su
se stesso a destra
Fabio Massacci
Programmazione ad Oggetti
22
Trasformazioni - Multiple (cont)
Palazzo10mVerde {...}
Transform {
rotation
0.0 0.1 0.0 1.57
children [
Transform {
translation
20.0 0.0 0.0
children [ Palazzo10mRosso {...} ]
}
]
}
• Risultato è un palazzo di 10m verde con ... dove è finito
il palazzo rosso?
Fabio Massacci
Programmazione ad Oggetti
23
Scarica

Transform