Rappresentare Oggetti in VRML

23
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

description

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 - PowerPoint PPT Presentation

Transcript of Rappresentare Oggetti in VRML

Page 1: 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

Page 2: Rappresentare Oggetti in VRML

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

Page 3: Rappresentare Oggetti in VRML

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

Page 4: Rappresentare Oggetti in VRML

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

Page 5: Rappresentare Oggetti in VRML

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

Page 6: Rappresentare Oggetti in VRML

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

{ . . . }]

}

Page 7: Rappresentare Oggetti in VRML

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

Page 8: Rappresentare Oggetti in VRML

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

}

}

]

}

Page 9: Rappresentare Oggetti in VRML

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

Page 10: Rappresentare Oggetti in VRML

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

Page 11: Rappresentare Oggetti in VRML

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

Page 12: Rappresentare Oggetti in VRML

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

}

}

]

}

Page 13: Rappresentare Oggetti in VRML

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

Page 14: Rappresentare Oggetti in VRML

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

Page 15: Rappresentare Oggetti in VRML

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)

Page 16: Rappresentare Oggetti in VRML

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

}

}

]

}

Page 17: Rappresentare Oggetti in VRML

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

Page 18: Rappresentare Oggetti in VRML

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

Page 19: Rappresentare Oggetti in VRML

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

Page 20: Rappresentare Oggetti in VRML

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

Page 21: Rappresentare Oggetti in VRML

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

Page 22: Rappresentare Oggetti in VRML

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

Page 23: Rappresentare Oggetti in VRML

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?