230 likes | 384 Views
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. Rappresentare Oggetti in VRML. File VRML descrive un mondo Sistema di assi cartesiani X/Y/Z
E N D
Fondamenti di Informaticaper IngegneriaProf. Ing. Fabio Massacci (A-L)Ing. Enrico Blanzieri (M-Z)Lezione 7Dip. di Informatica e Telecomunicazioni Università di Trento Fabio Massacci Programmazione ad Oggetti
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
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
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
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
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
Trasformazioni - Traslazioni • Traslazioni lungo gli assi Transform { #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
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
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
Trasformazioni - Rotazioni • Rotazioni intorno agli assi Transform { #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
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
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
Trasformazioni - Rotazioni (cont) • Sistema di assi Iniziale • Assi ruotati di 30g intorno a Z • Oggetto costruito su nuovi assi Fabio Massacci Programmazione ad Oggetti
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
Trasformazioni - Scalature • Scalature lungo agli assi Transform { #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
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
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
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
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
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
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
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
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