Fabio Massacci Programmazione ad Oggetti 1 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 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 nellorigine –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 nellorigine, alto verso lasse Y, asse X a destra, faccia verso lasse 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 nellorigine, 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 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 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 {... } Transform {... } ] }
Fabio Massacci Programmazione ad Oggetti 7 Trasformazioni - Traslazioni Traslazioni lungo gli assi Transform { #lungo asseXYZ translation children [... ] } Trasla tutti gli oggetti in children –verso destra lungo lasse X di 2m –stessa altezza sullasse Y –indietro di 1.5m lungo lasse Z
Fabio Massacci Programmazione ad Oggetti 8 Trasformazioni - Traslazioni (codice) Traslazioni lungo lasse X di un cilindro Transform { translation 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 assi Transform { #lungo asseXYZRadianti translation children [... ] } Ruota tutti gli oggetti in children –intorno allasse Z di 0.52 radianti (30 gradi) Angoli misurati in radianti –radians = degrees / * 3.141
Fabio Massacci Programmazione ad Oggetti 11 Trasformazioni - Rotazioni (cont) Asse di rotazione definisce un polo intorno a cui ruotare gli oggetti –Analogo allasse Nord/Sud della terra Esempi di rotazione tipici di r radianti –asse X r –asse Y r –asse Z 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 cilindro Transform { translation 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 dellasse –curvare le dita intorno allasse (come per stringerlo in mano) –la curvatura corrisponde ad una rotazione positiva
Fabio Massacci Programmazione ad Oggetti 15 Trasformazioni - Scalature Scalature lungo agli assi Transform { #lungo asseXYZ scale children [... ] } Scala tutti gli oggetti in children –lascia inalterate le dimensioni lungo lasse X –dimezza laltezza (dim lungo lasse Y) –raddoppia la profondità (dim lungo lasse Z) Scalatura Anamorfa (Isomorfa tutti num uguali)
Fabio Massacci Programmazione ad Oggetti 16 Trasformazioni - Scalature (codice) Scalatura Isomorfa di 0.5m in ogni direzione Transform { scale 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 rotation scale children [... ] } I figli sono scalati, ruotati e poi traslati Lordine è fissato, indipendentemente dallordine 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 lasse X
Fabio Massacci Programmazione ad Oggetti 20 Trasformazioni - Multiple (cont) Attenzione combinazione di trasformazioni –aspetti subdoli: rotation+ traslation, scale+traslation Scale+Traslation insieme Palazzo10mVerde {...} Transform { translation scale 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 children [ Transform { translation 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 traslazione Palazzo10mVerde {...} Transform { traslation rotation 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 children [ Transform { translation children [ Palazzo10mRosso {...} ] } ] } Risultato è un palazzo di 10m verde con... dove è finito il palazzo rosso?