Rappresentare Oggetti in VRML
description
Transcript of Rappresentare Oggetti in VRML
Fabio Massacci Programmazione ad Oggetti 1
Fondamenti di Informaticaper 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 2
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 3
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 4
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 5
Trasformazioni di Coordinate (cont)• Sintassi VRMLper la TrasformazioneTransform {
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 6
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 7
Trasformazioni - Traslazioni• Traslazioni lungo gli assiTransform {
#lungo asse X Y Z
translation 2.0 0.0 -1.5
children [ . . . ]
}
• 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 8
Trasformazioni - Traslazioni (codice)• Traslazioni lungo l’asse X di un cilindroTransform {
translation 2.0 0.0 0.0
children [
Shape {
geometry Cylinder {
height 2.0
radius 1.0
}
}
]
}
Fabio Massacci Programmazione ad Oggetti 9
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 10
Trasformazioni - Rotazioni• Rotazioni intorno agli assiTransform {
#lungo asse X Y Z Radianti
translation 0.0 0.0 1.0 0.52
children [ . . . ]
}
• 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 11
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 0.0 0.0 r
– asse Y 0.0 1.0 0.0 r
– asse Z 0.0 0.0 1.0 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 12
Trasformazioni - Rotazioni (codice)• Rotazioni intorno asse Z di un cilindroTransform {
translation 0.0 0.0 1.0 0.52
children [
Shape {
geometry Cylinder {
height 2.0
radius 1.0
}
}
]
}
Fabio Massacci Programmazione ad Oggetti 13
Trasformazioni - Rotazioni (cont)
• Sistema di assi Iniziale
• Assi ruotati di 30g intorno a Z
• Oggetto costruito su nuovi assi
Fabio Massacci Programmazione ad Oggetti 14
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 15
Trasformazioni - Scalature• Scalature lungo agli assiTransform {
#lungo asse X Y Z
scale 1.0 0.5 2.0
children [ . . . ]
}
• 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 16
Trasformazioni - Scalature (codice)• Scalatura Isomorfa di 0.5m in ogni direzioneTransform {
scale 0.5 0.5 0.5
children [
Shape {
geometry Cylinder {
height 2.0
radius 1.0
}
}
]
}
Fabio Massacci Programmazione ad Oggetti 17
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 18
Trasformazioni - Operazioni Multiple• Scalatura, rotazione e traslazione di un sistema di
coordinate Transform {
translation 2.0 0.0 0.0
rotation 0.0 0.0 1.0 0.52
scale 0.5 0.5 0.5
children [ . . . ]
}
• I figli sono scalati, ruotati e poi traslati• L’ordine è fissato, indipendentemente dall’ordine con
cui appaiono
Fabio Massacci Programmazione ad Oggetti 19
Trasformazioni - Multiple Operaz. (cont)
• Sistema di assi Iniziale
• Oggetto scalato della metà• ruotato di 30g• spostato di 2m lungo l’asse X
Fabio Massacci Programmazione ad Oggetti 20
Trasformazioni - Multiple (cont)• Attenzione combinazione di trasformazioni
– aspetti subdoli: rotation+ traslation, scale+traslation• Scale+Traslation insiemePalazzo10mVerde {...}
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 21
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 22
Trasformazioni - Multiple (cont)• Traslazioni e rotazioni abbastanza imprevedibili• Facile: rotazione e poi traslazionePalazzo10mVerde {...}
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 23
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?