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