+ All Categories
Home > Documents > Costruzione di Interfacce Lezione 5 Trasformazioni Affini [email protected] cignoni.

Costruzione di Interfacce Lezione 5 Trasformazioni Affini [email protected] cignoni.

Date post: 01-May-2015
Category:
Upload: paolina-salerno
View: 216 times
Download: 0 times
Share this document with a friend
69
Costruzione di Interfacce Lezione 5 Trasformazioni Affini [email protected] http://vcg.isti.cnr.it/~cignoni
Transcript
Page 1: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di InterfacceLezione 5

Trasformazioni Affini

[email protected]://vcg.isti.cnr.it/~cignoni

Page 2: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 2

Cambi di Sistemi di riferimento

Il primo step della pipeline di rendering è quello di trasformare la scena nel sistema di riferimento della camera

Page 3: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 3

Object Frame

Perché ogni oggetto ha il suo sistema di riferimento?Uso Multiplo di uno stesso oggettoPosizione parametrica

Page 4: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 4

Coordinate Omogenee

Si dice che un punto P è rappresentato dalla matrice colonna p

E un vettore w è rappresentato dalla matrice colonna a

13

2

1

p

03

2

1

a

Page 5: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 5

Trasformazioni Affini

Notare che se u è un vettore solo 9 elementi di A sono usati nella trasformazione

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)

010003

2

1

34333231

24232221

14131211

Au

Page 6: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 6

Traslazione

modifica i punti di un frame sommando a tutti i punti un vettore di spostamento d

dPP

dpp'

Page 7: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 7

Traslazione

011z

y

x

dz

y

x

z

y

x

ppdpp'

1000

100

010

001

z

y

x

TTpp

Page 8: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 8

Traslazione

1000

100

010

001

),,(z

y

x

zyx

T

1000

100

010

001

),,(),,(1

z

y

x

zyxzyx

TT

Page 9: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 9

Rotazione

Di una rotazione si deve specificare angolo, asse punto di

applicazione

Page 10: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 10

Rotazione

Caso semplice asse z, intorno all’origine, di un angolo

Possiamo considerare il problema in 2d

)sin(

)cos(

sin

cos

y

x

y

x

(x’,y’)

(x,y)

Page 11: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 11

Rotazione

cossincossinsincos

sincossinsincoscos

sin

cos

yxy

yxx

y

x

y

x

y

x

cossin

sincos

Page 12: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 12

Rotazione

1000

0100

00cossin

00sincos

)(

zR

1

cossin

sincos

1

)(

1

'

'

'

z

yx

yx

z

y

x

z

y

x

z

R

Page 13: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 13

Rotazioni

1000

0cos0sin

0010

0sin0cos

)(

YR

1000

0cossin0

0sincos0

0001

)(

XR

Page 14: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 14

Rotazione inversa

Le matrici di rotazione viste finora sono invertibili facilmente.

Quindi basta trasporre…

)()(

)cos()cos(

)sin()sin(

)()(

1

1

TRR

RR

Page 15: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 15

Rotazioni

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

Una rotazione arbitraria si ottiene componendo piu’ rotazioni e traslazioni

Page 16: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 16

Scalatura

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

1000

000

000

000

),,(z

y

x

zyx

z

y

x

zz

yy

xx

T

Page 17: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 17

Composizione di Trasformazioni

Le trasformazioni sono matrici L’applicazione di trasformazione è la moltiplicazione di

una matrice per un vettore. L’applicazione di una sequenza di trasformazioni ad un

punto corrisponde ad una sequenza di moltiplicazioni di di matrici per vettori

Associatività CBApq

ApBCq

pCBAq

Page 18: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 18

Composizione di trasformazioni

Conviene se si deve trasformare un solo punto

Conviene se si deve trasformare molti punti

ApBCq

pCBAq

Page 19: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 19

Composizione di Trasformazioni

La moltiplicazione tra matrici NON è commutativa

Quindi l’ordine delle trasformazioni È importante

Page 20: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 20

Composizione di Trasformazioni

RTpq

x

y

TRpq

x

y

Page 21: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 21

Rotazione intorno ad un punto

Si ottiene spostando tutto il sistema di riferimento nel punto, facendo la rotazione e rimettendo tutto a posto

T(-p)T(p)RRp 0

x

y

Page 22: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 22

Rotazione intorno ad un asse

L’idea e’ quella di fare :due rotazioni che portino l’asse di rotazione

specificato a coincidere con l’asse z,la rotazione lungo quell’asse di quanto

specificatorimettere tutto a posto

trovare non è semplice…

)()()()()( xxyyzzyyxx RRRRRR

xy

Page 23: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 23

Shearing

Sarebbe derivabile dalle altre…Lo spostamento e’ proporzionale alla

coord y;

1000

0100

0010

00cot1

)(

cot

xyH

zz

yy

yxx

Page 24: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 24

OpenGL

Nello Stato di OpenGL ci sono tre matrici 4x4 di trasformazioniModelViewProjectTexture

Una di queste e’ sempre la matrice corrente

Tutte i comandi che modificano matrici fanno sempre riferimento alla matrice corrente

Page 25: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 25

Opengl

Per cambiare matrice CorrenteglMatrixMode( *** )

GL_MODELVIEW GL_PROJECTION GL_TEXTURE

Per rimpiazzare la matriceglLoadIdentity()glLoadMatrix(Pointer to a matrix);

Tutti gli altri comandi modificano (moltiplicano per un altra matrice) la matrice corrente.

Page 26: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 26

OpenGl

Leggere una matrice glGetDoublev(GL_MODELVIEW_MATRIX,point

er_to_matrix) Nota: nello scambio diretto di matrici

OpenGL assume che siano memorizzate in column major order (e.g. per colonne)

151173

141062

13951

12840

aaaa

aaaa

aaaa

aaaa

Page 27: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 27

OpenGL

RotazioniglRotatef(angle, ax,ay,az);

TraslazioniglTranslatef(dx,dy,dz);

ScalatureglScalef(sx,sy,sz)

GenericaglMultMatrix(matrix_pointer)

in gradi!

Page 28: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 28

Composizione di Matrici in Opengl

I comandi opengl postmoltiplicano la matrice corrente per quella specificata

x

y

x

y

RTpq TRpq

IglRotate RglTranslate RT

Stato della matricecorrente dopo il

comando a sinistra

IglTranslate TglRotate TR

Page 29: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 29

Stack di matrici

La matrice corrente puo’ essere salvata in uno stack e recuperata successivamente

glPushMatrix()glPopMatrix()

Page 30: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 30

Stack di Matrici

Il Matrix Stack e’ particolarmente utile quando si disegnano scene strutturate// Whole car transformation// eg position of the car on the roadglTranslate(CarPos)glRotate(CarDirection,0,1,0)For(i=0;i<4;++i)

{ glPushMatrix(); // relative single wheel position

glTranslate(wheelpos[i]); DrawWheel(i);

glPopMatrix();}

Page 31: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 31

Composizione di Matrici in Opengl

I comandi opengl postmoltiplicano la matrice corrente per quella specificata

x

y

x

y

RTpq TRpq IglScale SglTranslate ST

Stato della matricecorrente dopo il

comando a sinistra

IglTranslate TglScale TS

Page 32: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 32

Trasformazioni

Due trasformazioni vengono applicate ai vertici della geometria che voglio disegnareTrasformazione di Modellazione

Porta la geometria nel sistema di riferimento standard della camera

Proiezione di vistaProietta la geometria dal sistema di riferimento

della camera sul piano di proiezione.

Page 33: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 33

Elementi di base

Page 34: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 34

Prospettiva Classica

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.

Page 35: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 35

Proiezioni ortografiche classiche

L’oggetto ha una struttura regolare, ben assimilabile ad un parallelepipedo;

Proietto sui lati del box. Centro di proiezione,

all’infinito, proiettori paralleli e

perpendicolari al piano di proiezione

Piano di proiezione perpendicolare agli assi del sistema di riferimento

Page 36: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 36

Proiezioni Assonometriche

Piani di proiezione in posizione non vincolata: Centro di proiezione, all’infinito, proiettori paralleli e perpendicolari al

piano di proiezione Piano di proiezione:

Simmetrico ai 3 assi (isometrica) Simmetrico rispetto a 2 assi

(dimetrico) Posizione qualsiasi (trimetrica)

Page 37: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 37

Proiezioni Oblique

Proiettori paralleli ma non perpendicolari al piano di proiezione

Page 38: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 38

Ortografica

Page 39: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 39

Proiezioni prospettiche

Caratteristica principale: diminuzione della dimensione apparente

degli oggetti all’aumentare della distanza dall COP.

I proiettori passano tutti per il COP

Caso ClassicoIl centro di proiezione simmetrico rispetto

alla finestra nel piano di proiezione

Caso generico, COP svincolato dal piano di proiezione

Page 40: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 40

Prospettiva classica

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); a) three vanishing points b) two vanishing points c) one vanishing points

Page 41: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 41

Prospettiva Classica

In realtà questi, come nel caso ortogonali sono solo vincoli sul piazzamento del piano di proiezione One point Persp: Piano di proiezione parallelo ad uno dei

piani del sistema di riferimento Two point Persp: Piano di proiezione perpendicolare ad uno

dei piani del sistema di riferimento Three Point Persp: Piano di proiezione Libero

Page 42: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 42

Camera Frame

Si assume che la camera sia piazzata con il centro di proiezione sull’origine e diretta verso l’asse z negativo.

È compito della matrice di Modellazione portare gli oggetti in questo frame.

Questo sistema di riferimento è detto camera frame, o eye frame

x

y

z

Page 43: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 43

Sistemi di coordinate in OpenGL

Object: la ruota con l’origine nel centro.

World: la ruota piazzata nel sistema di riferimento del mondo (e.g. quello classico

con y = alto del mondo, ecc,). Cambia quando si muove la macchina

Eye: Il sistema di riferimento in cui l’origine e’ il centro di proiezione, la z è la

direzione di vista ecc. Cambia quando muovo l’osservatore.

Clip Normalized device Window

Page 44: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 44

Sistema di riferimento della Camera

Come si specifica il sistema di riferimento della camera? Matrice di trasformazione

che fa parte delle matrici di modellazione

Passa dalle coordinate di mondo alle coordinate di occhio

Page 45: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 45

Piazzare la camera

1000

100

0010

0001

dT

?

Caso semplice, 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)

E` solo una traslazione sull’asse z:

Page 46: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 46

Piazzare la camera

Caso GeneraleDefinire una camera significa definire

una proiezione (prospettica)La camera (il centro di proiezione) è

centrata in un punto detto VRP (view Reference Point)

Il Piano di proiezione è perpendicolare ad un vettore VPN (view plane normal)

Del piano e’ necessario specificare anche l’orientamento, quindi Si specifica VUP (view up vector)

Page 47: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 47

Piazzare la camera

La trasformazione non e’ altro che un cambio di sistemi di riferimento.

Basta definire gli assi e l’origine del un sistema di riferimento in termini dell’altro.

Noi abbiamo la posizione della camera nel sistema di riferimento world

Dobbiamo ancora esprimere gli assi del sistema di riferimento camera in sr World.

Page 48: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 48

Camera axis in world space

Uno alla volta. L’asse z della camera e’ semplicemnte la

direzione di proiezione, cioe’ la normale al piano di proiezione

L’asse x della camera deve essere perpendicolare al vettore up e all’asse z appena trovato

L’asse y e’ semplicemente il prodotto vettore tra gli altri due assi che ho trovato (attenti al segno)

zupx

xzy

Page 49: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 49

Cambio di Frame

Dati due sistemi di riferimento.

Esprimiamo uno in termini dell’altro:

Questo definisce la matrice 4x4 di cambiamento di frame

03210321 ,,,,,, QuuuPvvv

03432421410

3332321313

3232221212

3132121111

PvvvQ

vvvu

vvvu

vvvu

1

0

0

0

434241

333231

232221

131211

M

Page 50: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 50

Cambio di Frame

La matrice di cambiamento di frame

Date le due rappresentazioni a,b in coordinate omogenee in differenti frame (sia di un vettore che di un punto), vale:

0

3

2

1

0

3

2

1

P

v

v

v

Q

u

u

u

M

bMaabb TTTT

P

v

v

v

P

v

v

v

M

Q

u

u

u

0

3

2

1

0

3

2

1

0

3

2

1

Page 51: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 51

Noi abbiamoCamera e suoi parametri in coordinate

di mondo.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.

we Mpp

Page 52: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 52

Eye to World

Esprimo il sistema di riferimento della camera in termini dello spazio di mondo

ew Mpp 0,,,,,, 0 zyxPnvu

100000

zzzz

yyyy

xxxx

zyx

zyx

zyx

zyx

pnvu

pnvu

pnvu

zpypxpP

znynxnn

zvyvxvv

zuyuxuu

M

Page 53: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 53

World to eye

A noi serve la matrice inversa:da world a eye

Per invertirla si nota che la possiamo scrivere come un prodotto tra Rot e Tras

1000

0

0

0

1000

100

010

001

1000zzz

yyy

xyx

z

y

x

zzzz

yyyy

xxxx

nvu

nvu

nvu

p

p

p

pnvu

pnvu

pnvu

TRM

Page 54: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 54

World to Eye

Invertire Traslazioni e rotazioni è facile…

1000

100

010

001

1000

0

0

0

1111

z

y

x

zyx

zyx

zyx

p

p

p

nnn

vvv

uuu

TRTRM

1000zzyyxxzyx

zzyyxxzyx

zzyyxxzyx

npnpnpnnn

vpvpvpvvv

upupupuuu

Page 55: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 55

In opengl

Grazie al cielo in opengl tutto ciò è ben semplice

gluLookAt( eyex, eyex, eyex,atx,aty,atz, upx,upy,upz);

Definisce la trasformazione che porta dallo spazio di mondo allo spazio di eye;

NOTA bene la gluLookAt va nella ModelView Matrix

Page 56: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 56

Matrici di Proiezione Prospettica

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

Vogliamo trovare la proiezionesul piano di proiezione di un punto ),,( zyx

),,( ppp zyx

Page 57: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 57

Proiezione Prospettica

Si ottiene che:

Nota che questa trasformazione non è lineare, né affine, né reversibile.

dz

yy

dz

xx

d

x

z

x

pp

p

//

Page 58: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 58

Coordinate Omogenee

Estendiamo la nostra def di coordinate omogenee dicendo che un punto p può essere rappresentato come

Un punto in 3D corrisponde ad una linea in 4d. Posso Sempre recuperare la forma con 1 come

quarto elemento Posso fare matrici che modificano il quarto

elemento.

0con

w

w

wz

wy

wx

p

Page 59: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 59

Coordinate Omogenee

In particolare possiamo definire la matrice

Che effettua la trasformazione prospettica, purchè si normalizzi dividendo per la quarta componente

1

/

/

/10/100

0100

0010

0001

ddz

ydz

x

dz

z

y

x

z

y

x

d

MpqpM

Page 60: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 60

Proiezione prospettica in opengl

Finora abbiamo definito solo l’operazione di proiezione.

Per definire una camera dobbiamo anche definire il view volume Angle of view Near and far clipping planes

Page 61: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 61

Proiezione prospettica in opengl

glFrustum(xmin,xmax,ymin,ymax,near,far); gluPerspective(fov,aspect,near,far)

-far

-near

-near

-far

Page 62: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 62

Proiezioni Ortogonali

Caso particolare di proiezione parallela in cui le linee di proiezione sono perpendicolari al view plane

La proiezione è semplicemente0 ppp zyyxx

10000

0000

0010

0001

1

z

y

x

z

y

x

p

p

p

Page 63: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 63

Proiezioni Ortogonali in OpenGL

glOrtho(xmin,xmax,ymin,ymax,near,far); I clipping planes sono a z= -near e z=-far

-far

-near

-near

-far

Page 64: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 64

Hidden Surface Removal

Si deve disegnare sul frame buffer solo quelle porzioni di primitive che sono davanti a tutte le altre; esistono numerosi algoritmi

Tecnica Zbuffer, per ogni pixel dello schermo memorizzo la minima distanza dal centro di proiezione disegnata in quel pixel.

Quando rasterizzo, disegno (e aggiorno lo zbuffer, solo se davanti.

Page 65: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 65

Window e Device coords

In Opengl si distingue tra Normalized Device (screen) Coords

Sono 3d e mantengono la depth

Window CoordSono 2d.

Page 66: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 66

Normalized Device Coord

In Opengl Perspective Transf + division Convertono a Normalized Device Coord

La geometria è quindi clippata sul Canonical View Volume

1

1

1

z

y

x

Page 67: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 67

Mapping the view volume

Sul Canonical view Volume, In questo caso la proiezione ortografica

diventa

(1,1,-1)

(-1,-1,1)

000

200

02

0

002

minmax

minmax

minmax

minmax

minmax

minmax

nearfar

nearfar

nearfar

yy

yy

yy

xx

xx

xx

Page 68: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 68

Esempio tipico

Un app carica/genera un oggetto in un suo sistema di riferimento e lo vuole far vedere.Calcolare il bbox dell’oggetto.Spostare l’oggetto nell’origineScalare l’oggetto fino alla dimensione

desiderata che sia compatibile con le dim del mio volume di vista

traslare l’oggetto nel volume di vista

Page 69: Costruzione di Interfacce Lezione 5 Trasformazioni Affini cignoni@isti.cnr.it cignoni.

Costruzione di Interfacce - Paolo Cignoni 69

Esempio tipico

L’ordine delle cose deve essere quello giusto

glMatrixMode (GL_PROJECTION);

glLoadIdentity ();

gluPerspective(ViewAngle,1,.1,10);

glMatrixMode (GL_MODELVIEW);

glLoadIdentity ();

glTranslatef(0,0,-4); // anche una glulookat // andava bene

float d = 2.0/m.bbox.Diag();

glScalef(d, d, d);

glTranslate(-m.bbox.Center());

DrawMyObject();


Recommended