Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoniisti

  • Slides: 69
Download presentation
Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti. cnr. it http: //vcg. isti. cnr.

Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti. cnr. it http: //vcg. isti. cnr. it/~cignoni Costruzione di Interfacce - Paolo Cignoni

Cambi di Sistemi di riferimento v Il primo step della pipeline di rendering è

Cambi di Sistemi di riferimento v Il primo step della pipeline di rendering è quello di trasformare la scena nel sistema di riferimento della camera Costruzione di Interfacce - Paolo Cignoni 2

Object Frame v Perché ogni oggetto ha il suo sistema di riferimento? v. Uso

Object Frame v Perché ogni oggetto ha il suo sistema di riferimento? v. Uso Multiplo di uno stesso oggetto v. Posizione parametrica Costruzione di Interfacce - Paolo Cignoni 3

Coordinate Omogenee v Si dice che un punto P è rappresentato dalla matrice colonna

Coordinate Omogenee v Si dice che un punto P è rappresentato dalla matrice colonna p v E un vettore w è rappresentato dalla matrice colonna a Costruzione di Interfacce - Paolo Cignoni 4

Trasformazioni Affini v Notare che se u è un vettore solo 9 elementi di

Trasformazioni Affini v Notare che se u è un vettore solo 9 elementi di A sono usati nella trasformazione v La quarta colonna corrisponde alla quarta riga della matrice di cambiamento di frame, che conteneva il nuovo punto di origine del frame (che chiaramente non serve se si parla di vettori) Costruzione di Interfacce - Paolo Cignoni 5

Traslazione v modifica i punti di un frame sommando a tutti i punti un

Traslazione v modifica i punti di un frame sommando a tutti i punti un vettore di spostamento d Costruzione di Interfacce - Paolo Cignoni 6

Traslazione Costruzione di Interfacce - Paolo Cignoni 7

Traslazione Costruzione di Interfacce - Paolo Cignoni 7

Traslazione Costruzione di Interfacce - Paolo Cignoni 8

Traslazione Costruzione di Interfacce - Paolo Cignoni 8

Rotazione v Di una rotazione si deve specificare vangolo, vasse vpunto di applicazione Costruzione

Rotazione v Di una rotazione si deve specificare vangolo, vasse vpunto di applicazione Costruzione di Interfacce - Paolo Cignoni 9

Rotazione v Caso semplice asse z, intorno all’origine, di un angolo q v Possiamo

Rotazione v Caso semplice asse z, intorno all’origine, di un angolo q v Possiamo considerare il problema in 2 d (x’, y’) q r Costruzione di Interfacce - Paolo Cignoni (x, y) 10

Rotazione Costruzione di Interfacce - Paolo Cignoni 11

Rotazione Costruzione di Interfacce - Paolo Cignoni 11

Rotazione Costruzione di Interfacce - Paolo Cignoni 12

Rotazione Costruzione di Interfacce - Paolo Cignoni 12

Rotazioni Costruzione di Interfacce - Paolo Cignoni 13

Rotazioni Costruzione di Interfacce - Paolo Cignoni 13

Rotazione inversa v Le matrici di rotazione viste finora sono invertibili facilmente. v Quindi

Rotazione inversa v Le matrici di rotazione viste finora sono invertibili facilmente. v Quindi basta trasporre… Costruzione di Interfacce - Paolo Cignoni 14

Rotazioni v Finora abbiamo visto solo rotazioni intorno all’origine e lungo gli assi. v

Rotazioni v Finora abbiamo visto solo rotazioni intorno all’origine e lungo gli assi. v Una rotazione arbitraria si ottiene componendo piu’ rotazioni e traslazioni Costruzione di Interfacce - Paolo Cignoni 15

Scalatura v Non rigida v Non uniforme lungo gli assi v Solo centrata all’origine

Scalatura v Non rigida v Non uniforme lungo gli assi v Solo centrata all’origine Costruzione di Interfacce - Paolo Cignoni 16

Composizione di Trasformazioni v Le trasformazioni sono matrici v L’applicazione di trasformazione è la

Composizione di Trasformazioni v Le trasformazioni sono matrici v L’applicazione di trasformazione è la moltiplicazione di una matrice per un vettore. v L’applicazione di una sequenza di trasformazioni ad un punto corrisponde ad una sequenza di moltiplicazioni di di matrici per vettori v Associatività Costruzione di Interfacce - Paolo Cignoni 17

Composizione di trasformazioni v Conviene se si deve trasformare un solo punto v Conviene

Composizione di trasformazioni v Conviene se si deve trasformare un solo punto v Conviene se si deve trasformare molti punti Costruzione di Interfacce - Paolo Cignoni 18

Composizione di Trasformazioni v La moltiplicazione tra matrici NON è commutativa v Quindi l’ordine

Composizione di Trasformazioni v La moltiplicazione tra matrici NON è commutativa v Quindi l’ordine delle trasformazioni È importante Costruzione di Interfacce - Paolo Cignoni 19

Composizione di Trasformazioni y y x Costruzione di Interfacce - Paolo Cignoni x 20

Composizione di Trasformazioni y y x Costruzione di Interfacce - Paolo Cignoni x 20

Rotazione intorno ad un punto v Si ottiene spostando tutto il sistema di riferimento

Rotazione intorno ad un punto v Si ottiene spostando tutto il sistema di riferimento nel punto, facendo la rotazione e rimettendo tutto a posto y x Costruzione di Interfacce - Paolo Cignoni 21

Rotazione intorno ad un asse v L’idea e’ quella di fare : vdue rotazioni

Rotazione intorno ad un asse v L’idea e’ quella di fare : vdue rotazioni che portino l’asse di rotazione specificato a coincidere con l’asse z, vla rotazione lungo quell’asse di quanto specificato vrimettere tutto a posto vtrovare non è semplice… Costruzione di Interfacce - Paolo Cignoni 22

Shearing v Sarebbe derivabile dalle altre… v Lo spostamento e’ proporzionale alla coord y;

Shearing v Sarebbe derivabile dalle altre… v Lo spostamento e’ proporzionale alla coord y; Costruzione di Interfacce - Paolo Cignoni 23

Open. GL v Nello Stato di Open. GL ci sono tre matrici 4 x

Open. GL v Nello Stato di Open. GL ci sono tre matrici 4 x 4 di trasformazioni v. Model. View v. Project v. Texture v Una di queste e’ sempre la matrice corrente v Tutte i comandi che modificano matrici fanno sempre riferimento alla matrice corrente Costruzione di Interfacce - Paolo Cignoni 24

Opengl v Per cambiare matrice Corrente v gl. Matrix. Mode( *** ) v GL_MODELVIEW

Opengl v Per cambiare matrice Corrente v gl. Matrix. Mode( *** ) v GL_MODELVIEW v GL_PROJECTION v GL_TEXTURE v Per rimpiazzare la matrice vgl. Load. Identity() vgl. Load. Matrix(Pointer to a matrix); v Tutti gli altri comandi modificano (moltiplicano per un altra matrice) la matrice corrente. Costruzione di Interfacce - Paolo Cignoni 25

Open. Gl v Leggere una matrice v gl. Get. Doublev(GL_MODELVIEW_MATRIX, poi nter_to_matrix) v Nota:

Open. Gl v Leggere una matrice v gl. Get. Doublev(GL_MODELVIEW_MATRIX, poi nter_to_matrix) v Nota: nello scambio diretto di matrici Open. GL assume che siano memorizzate in column major order (e. g. per colonne) Costruzione di Interfacce - Paolo Cignoni 26

in gradi! Open. GL v Rotazioni vgl. Rotatef(angle, ax, ay, az); v Traslazioni vgl.

in gradi! Open. GL v Rotazioni vgl. Rotatef(angle, ax, ay, az); v Traslazioni vgl. Translatef(dx, dy, dz); v Scalature vgl. Scalef(sx, sy, sz) v Generica vgl. Mult. Matrix(matrix_pointer) Costruzione di Interfacce - Paolo Cignoni 27

Composizione di Matrici in Opengl v I comandi opengl postmoltiplicano la matrice corrente per

Composizione di Matrici in Opengl v I comandi opengl postmoltiplicano la matrice corrente per quella specificata Stato della matrice corrente dopo il comando a sinistra gl. Rotate gl. Translate I R RT y I T TR gl. Translate gl. Rotate y x Costruzione di Interfacce - Paolo Cignoni x 28

Stack di matrici v La matrice corrente puo’ essere salvata in uno stack e

Stack di matrici v La matrice corrente puo’ essere salvata in uno stack e recuperata successivamente v gl. Push. Matrix() v gl. Pop. Matrix() Costruzione di Interfacce - Paolo Cignoni 29

Stack di Matrici v Il Matrix Stack e’ particolarmente utile quando si disegnano scene

Stack di Matrici v Il Matrix Stack e’ particolarmente utile quando si disegnano scene strutturate // Whole car transformation // eg position of the car on the road gl. Translate(Car. Pos) gl. Rotate(Car. Direction, 0, 1, 0) For(i=0; i<4; ++i) { gl. Push. Matrix(); // relative single wheel position gl. Translate(wheelpos[i]); Draw. Wheel(i); gl. Pop. Matrix(); } Costruzione di Interfacce - Paolo Cignoni 30

Composizione di Matrici in Opengl v I comandi opengl postmoltiplicano la matrice corrente per

Composizione di Matrici in Opengl v I comandi opengl postmoltiplicano la matrice corrente per quella specificata Stato della matrice corrente dopo il comando a sinistra gl. Translate gl. Scale I T TS gl. Scale gl. Translate y I S ST y x Costruzione di Interfacce - Paolo Cignoni x 31

Trasformazioni v Due trasformazioni vengono applicate ai vertici della geometria che voglio disegnare v.

Trasformazioni v Due trasformazioni vengono applicate ai vertici della geometria che voglio disegnare v. Trasformazione di Modellazione v. Porta la geometria nel sistema di riferimento standard della camera v. Proiezione di vista v. Proietta la geometria dal sistema di riferimento della camera sul piano di proiezione. Costruzione di Interfacce - Paolo Cignoni 32

Elementi di base Costruzione di Interfacce - Paolo Cignoni 33

Elementi di base Costruzione di Interfacce - Paolo Cignoni 33

Prospettiva Classica v Il problema è quello classico, da sempre affrontato, nell’arte, in architettura

Prospettiva Classica v Il problema è quello classico, da sempre affrontato, nell’arte, in architettura e della progettazione, di riuscire a riportare su di un piano, in maniera rigorosa un oggetto tridimensionale. Costruzione di Interfacce - Paolo Cignoni 34

Proiezioni ortografiche classiche v L’oggetto ha una struttura regolare, ben assimilabile ad un parallelepipedo;

Proiezioni ortografiche classiche v L’oggetto ha una struttura regolare, ben assimilabile ad un parallelepipedo; v Proietto sui lati del box. v Centro di proiezione, all’infinito, v proiettori paralleli e perpendicolari al piano di proiezione v Piano di proiezione perpendicolare agli assi del sistema di riferimento Costruzione di Interfacce - Paolo Cignoni 35

Proiezioni Assonometriche v Piani di proiezione in posizione non vincolata: v Centro di proiezione,

Proiezioni Assonometriche v Piani di proiezione in posizione non vincolata: v Centro di proiezione, all’infinito, v proiettori paralleli e perpendicolari al piano di proiezione v Piano di proiezione: v Simmetrico ai 3 assi (isometrica) v Simmetrico rispetto a 2 assi (dimetrico) v Posizione qualsiasi (trimetrica) Costruzione di Interfacce - Paolo Cignoni 36

Proiezioni Oblique v Proiettori paralleli ma non perpendicolari al piano di proiezione Costruzione di

Proiezioni Oblique v Proiettori paralleli ma non perpendicolari al piano di proiezione Costruzione di Interfacce - Paolo Cignoni 37

Ortografica Costruzione di Interfacce - Paolo Cignoni 38

Ortografica Costruzione di Interfacce - Paolo Cignoni 38

Proiezioni prospettiche v Caratteristica principale: vdiminuzione della dimensione apparente degli oggetti all’aumentare della distanza

Proiezioni prospettiche v Caratteristica principale: vdiminuzione della dimensione apparente degli oggetti all’aumentare della distanza dall COP. v. I proiettori passano tutti per il COP v Caso Classico v. Il centro di proiezione simmetrico rispetto alla finestra nel piano di proiezione v Caso generico, v. COP svincolato dal piano di proiezione Costruzione di Interfacce - Paolo Cignoni 39

Prospettiva classica v Al solito nella visione tradizionale del disegno tecnico si è soliti

Prospettiva classica v Al solito nella visione tradizionale del disegno tecnico si è soliti distinguere vari tipi di proiezione prospettica, indicando il numero di punti all’infinito (vanishing points); v a) three vanishing points v b) two vanishing points v c) one vanishing points Costruzione di Interfacce - Paolo Cignoni 40

Prospettiva Classica v In realtà questi, come nel caso ortogonali sono solo vincoli sul

Prospettiva Classica v In realtà questi, come nel caso ortogonali sono solo vincoli sul piazzamento del piano di proiezione v One point Persp: Piano di proiezione parallelo ad uno dei piani del sistema di riferimento v Two point Persp: Piano di proiezione perpendicolare ad uno dei piani del sistema di riferimento v Three Point Persp: Piano di proiezione Libero Costruzione di Interfacce - Paolo Cignoni 41

Camera Frame v Si assume che la camera sia piazzata con il centro di

Camera Frame v Si assume che la camera sia piazzata con il centro di proiezione sull’origine e diretta verso l’asse z negativo. v È compito della matrice di Modellazione portare gli oggetti in questo frame. v Questo sistema di riferimento è detto camera frame, o eye frame y z Costruzione di Interfacce - Paolo Cignoni x 42

Sistemi di coordinate in Open. GL v Object: v la ruota con l’origine nel

Sistemi di coordinate in Open. GL v Object: v la ruota con l’origine nel centro. v World: v la ruota piazzata nel sistema di riferimento del mondo (e. g. quello classico con y = alto del mondo, ecc, ). v Cambia quando si muove la macchina v Eye: v Il sistema di riferimento in cui l’origine e’ il centro di proiezione, la z è la direzione di vista ecc. v Cambia quando muovo l’osservatore. v Clip v Normalized device v Window Costruzione di Interfacce - Paolo Cignoni 43

Sistema di riferimento della Camera v Come si specifica il sistema di riferimento della

Sistema di riferimento della Camera v Come si specifica il sistema di riferimento della camera? v Matrice di trasformazione che fa parte delle matrici di modellazione v Passa dalle coordinate di mondo alle coordinate di occhio Costruzione di Interfacce - Paolo Cignoni 44

Piazzare la camera v Caso semplice, v Voglio piazzare la camera in modo che

Piazzare la camera v Caso semplice, v Voglio piazzare la camera in modo che inquadri oggetti centrati sull’origine (del sistema di riferimento mondo), guardando lungo la z negativa (come di default) v E` solo una traslazione sull’asse z: ? Costruzione di Interfacce - Paolo Cignoni 45

Piazzare la camera v Caso Generale v Definire una camera significa definire una proiezione

Piazzare la camera v Caso Generale v Definire una camera significa definire una proiezione (prospettica) v. La camera (il centro di proiezione) è centrata in un punto detto VRP (view Reference Point) v. Il Piano di proiezione è perpendicolare ad un vettore VPN (view plane normal) v Del piano e’ necessario specificare anche l’orientamento, quindi v. Si specifica VUP (view up vector) Costruzione di Interfacce - Paolo Cignoni 46

Piazzare la camera v La trasformazione non e’ altro che un cambio di sistemi

Piazzare la camera v La trasformazione non e’ altro che un cambio di sistemi di riferimento. v Basta definire gli assi e l’origine del un sistema di riferimento in termini dell’altro. v Noi abbiamo la posizione della camera nel sistema di riferimento world v Dobbiamo ancora esprimere gli assi del sistema di riferimento camera in sr World. Costruzione di Interfacce - Paolo Cignoni 47

Camera axis in world space v Uno alla volta. v L’asse z della camera

Camera axis in world space v Uno alla volta. v L’asse z della camera e’ semplicemnte la direzione di proiezione, cioe’ la normale al piano di proiezione v L’asse x della camera deve essere perpendicolare al vettore up e all’asse z appena trovato v L’asse y e’ semplicemente il prodotto vettore tra gli altri due assi che ho trovato (attenti al segno) Costruzione di Interfacce - Paolo Cignoni 48

Cambio di Frame v Dati due sistemi di riferimento. v Esprimiamo uno in termini

Cambio di Frame v Dati due sistemi di riferimento. v Esprimiamo uno in termini dell’altro: v Questo definisce la matrice 4 x 4 di cambiamento di frame Costruzione di Interfacce - Paolo Cignoni 49

Cambio di Frame v La matrice di cambiamento di frame v Date le due

Cambio di Frame v La matrice di cambiamento di frame v Date le due rappresentazioni a, b in coordinate omogenee in differenti frame (sia di un vettore che di un punto), vale: Costruzione di Interfacce - Paolo Cignoni 50

v Noi abbiamo v Camera e suoi parametri in coordinate di mondo. v Vogliamo

v Noi abbiamo v Camera e suoi parametri in coordinate di mondo. v Vogliamo trovare la trasf M che prenda la rappresentazione di un punto pw in coordinate omogenee spazio di mondo e ne dia la sua rappresentazione in coordinate di camera pe. Costruzione di Interfacce - Paolo Cignoni 51

Eye to World v Esprimo il sistema di riferimento della camera in termini dello

Eye to World v Esprimo il sistema di riferimento della camera in termini dello spazio di mondo Costruzione di Interfacce - Paolo Cignoni 52

World to eye v A noi serve la matrice inversa: vda world a eye

World to eye v A noi serve la matrice inversa: vda world a eye v Per invertirla si nota che la possiamo scrivere come un prodotto tra Rot e Tras Costruzione di Interfacce - Paolo Cignoni 53

World to Eye v Invertire Traslazioni e rotazioni è facile… Costruzione di Interfacce -

World to Eye v Invertire Traslazioni e rotazioni è facile… Costruzione di Interfacce - Paolo Cignoni 54

In opengl v Grazie al cielo in opengl tutto ciò è ben semplice v

In opengl v Grazie al cielo in opengl tutto ciò è ben semplice v glu. Look. At( eyex, aty, atz, upx, upy, upz); v Definisce la trasformazione che porta dallo spazio di mondo allo spazio di eye; v NOTA bene la glu. Look. At va nella Model. View Matrix Costruzione di Interfacce - Paolo Cignoni 55

Matrici di Proiezione Prospettica v Assunto che siamo nel sistema di riferimento della camera

Matrici di Proiezione Prospettica v Assunto che siamo nel sistema di riferimento della camera con il centro di proiezione nell’origine, e il piano di proiezione a distanza d lungo l’asse -z v Vogliamo trovare la proiezione sul piano di proiezione di un punto Costruzione di Interfacce - Paolo Cignoni 56

Proiezione Prospettica v Si ottiene che: v Nota che questa trasformazione non è lineare,

Proiezione Prospettica v Si ottiene che: v Nota che questa trasformazione non è lineare, né affine, né reversibile. Costruzione di Interfacce - Paolo Cignoni 57

Coordinate Omogenee v Estendiamo la nostra def di coordinate omogenee dicendo che un punto

Coordinate Omogenee v Estendiamo la nostra def di coordinate omogenee dicendo che un punto p può essere rappresentato come v Un punto in 3 D corrisponde ad una linea in 4 d. v Posso Sempre recuperare la forma con 1 come quarto elemento v Posso fare matrici che modificano il quarto elemento. Costruzione di Interfacce - Paolo Cignoni 58

Coordinate Omogenee v In particolare possiamo definire la matrice Che effettua la trasformazione prospettica,

Coordinate Omogenee v In particolare possiamo definire la matrice Che effettua la trasformazione prospettica, purchè si normalizzi dividendo per la quarta componente Costruzione di Interfacce - Paolo Cignoni 59

Proiezione prospettica in opengl v Finora abbiamo definito solo l’operazione di proiezione. v Per

Proiezione prospettica in opengl v Finora abbiamo definito solo l’operazione di proiezione. v Per definire una camera dobbiamo anche definire il view volume v Angle of view v Near and far clipping planes Costruzione di Interfacce - Paolo Cignoni 60

Proiezione prospettica in opengl v gl. Frustum(xmin, xmax, ymin, ymax, near, far); v glu.

Proiezione prospettica in opengl v gl. Frustum(xmin, xmax, ymin, ymax, near, far); v glu. Perspective(fov, aspect, near, far) -far -near Costruzione di Interfacce - Paolo Cignoni 61

Proiezioni Ortogonali v Caso particolare di proiezione parallela in cui le linee di proiezione

Proiezioni Ortogonali v Caso particolare di proiezione parallela in cui le linee di proiezione sono perpendicolari al view plane v La proiezione è semplicemente Costruzione di Interfacce - Paolo Cignoni 62

Proiezioni Ortogonali in Open. GL v gl. Ortho(xmin, xmax, ymin, ymax, near, far); v

Proiezioni Ortogonali in Open. GL v gl. Ortho(xmin, xmax, ymin, ymax, near, far); v I clipping planes sono a z= -near e z=-far -near Costruzione di Interfacce - Paolo Cignoni 63

Hidden Surface Removal v Si deve disegnare sul frame buffer solo quelle porzioni di

Hidden Surface Removal v Si deve disegnare sul frame buffer solo quelle porzioni di primitive che sono davanti a tutte le altre; esistono numerosi algoritmi v Tecnica Zbuffer, per ogni pixel dello schermo memorizzo la minima distanza dal centro di proiezione disegnata in quel pixel. v Quando rasterizzo, disegno (e aggiorno lo zbuffer, solo se davanti. Costruzione di Interfacce - Paolo Cignoni 64

Window e Device coords v In Opengl si distingue tra v Normalized Device (screen)

Window e Device coords v In Opengl si distingue tra v Normalized Device (screen) Coords v. Sono 3 d e mantengono la depth v Window Coord v. Sono 2 d. Costruzione di Interfacce - Paolo Cignoni 65

Normalized Device Coord v In Opengl Perspective Transf + division Convertono a Normalized Device

Normalized Device Coord v In Opengl Perspective Transf + division Convertono a Normalized Device Coord v La geometria è quindi clippata sul v Canonical View Volume Costruzione di Interfacce - Paolo Cignoni 66

Mapping the view volume v Sul Canonical view Volume, v In questo caso la

Mapping the view volume v Sul Canonical view Volume, v In questo caso la proiezione ortografica diventa (1, 1, -1) (-1, 1) Costruzione di Interfacce - Paolo Cignoni 67

Esempio tipico v Un app carica/genera un oggetto in un suo sistema di riferimento

Esempio tipico v Un app carica/genera un oggetto in un suo sistema di riferimento e lo vuole far vedere. v. Calcolare il bbox dell’oggetto. v. Spostare l’oggetto nell’origine v. Scalare l’oggetto fino alla dimensione desiderata che sia compatibile con le dim del mio volume di vista vtraslare l’oggetto nel volume di vista Costruzione di Interfacce - Paolo Cignoni 68

Esempio tipico v L’ordine delle cose deve essere quello giusto gl. Matrix. Mode (GL_PROJECTION);

Esempio tipico v L’ordine delle cose deve essere quello giusto gl. Matrix. Mode (GL_PROJECTION); gl. Load. Identity (); glu. Perspective(View. Angle, 1, 10); gl. Matrix. Mode (GL_MODELVIEW); gl. Load. Identity (); gl. Translatef(0, 0, -4); // anche una glulookat // andava bene float d = 2. 0/m. bbox. Diag(); gl. Scalef(d, d, d); gl. Translate(-m. bbox. Center()); Draw. My. Object(); Costruzione di Interfacce - Paolo Cignoni 69