• Non ci sono risultati.

2view Coordinates(a.k.a. eye Coordinates)screen Space

N/A
N/A
Protected

Academic year: 2021

Condividi "2view Coordinates(a.k.a. eye Coordinates)screen Space"

Copied!
26
0
0

Testo completo

(1)

M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Transform

x

y

z v

0

v

1

v

2 world Coordinates

1) transformazione di vista 2) transformazione di proiezione 3) transformazione di viewport

y 2

-z v

0

v

1

v

2

view Coordinates (a.k.a. eye Coordinates)

y x -z v

0

v

1

v

2

v

0

v

2

v

1

v

0

v

1

v

2 screen Space

3

“Clip”

Coordinates

1

1 -1

-1 x

x

y

z v

0

v

1

v

2 object Coordinates

0) transformazione di modellazione

0

1

z Object Coordinates

• Dare ad ogni oggetto il suo sistema di coordiante privato:

il suo Object Coordinates;

y

y y

y x

x x

x

z

z

z

z

y

x

(2)

Es: scene graph

«Spazio Mondo»

T1 T2 T3 T4

Object Coordinates

• Dare ad ogni oggetto il suo sistema di coordiante privato:

il suo Object Coordinates;

• Durante il transform, prima di tutto

portare ogni oggetto nello sist di coordinate comuni:

da Object Coordinates a World Coordiantes

– consente di riutilizzare lo stesso modello più volte nella stessa scena – ogni istanza: stesse Object Coordinates dei vertici,

ma una trasformazione (di "modellazione") diversa per arrivare a World Coordinates diverse

– Es: ruote di una macchina (4 volte l'istanza di una ruota)

alberi, case, sedie in una stanza, pedoni su una scacchiera, etc, etc, etc

(3)

Object Space (analogo in 2D)

• spazio oggetto

1

spazio oggetto (“spazio macchina”) origine

o

dello

spazio oggetto

x y

-1 2 3 -2

-3

assi

x

e y dello spazio oggetto

1 2 3

-1 -2 -3

M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Object Coordinates (analogo in 2D)

• coordinate oggetto

1.5

2.3 p = (1.5, 2.3)

spazio oggetto (“spazio macchina”)

coordinate di

p

in spazio oggetto

x y

vec2 x( 1.5 , 2.3 );

. . .

(4)

Object Coordinates (analogo in 2D)

• coordinate mondo

1.5 2.3

p = (1.5, 2.3)

spazio oggetto (“spazio macchina”)

coordinate di

p

in spazio oggetto

x y

x y

spazio mondo

= (12.5, 8.1) 8.1

12.5

coordinate di

p

in spazio mondo

1 1

M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Object Coordinates

1.5 2.3

p = (1.5, 2.3)

spazio oggetto (“spazio macchina”)

coordinate di p in spazio oggetto

x y

x y

spazio mondo

= (12.5, 8.1) 8.1

12.5

coordinate di p in spazio mondo

1 1

11 5.8

 

 

 

 

=

 

 

 

 

 

 

 

 

1 0 . 0

1 . 8

5 . 12

1 0 . 0

3 . 2

5 . 1

1 0 0 0

0 . 0 1 0 0

8 . 5 0 1 0

11

0

0

1

(5)

M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Transformazione di Modellazione

x

y

z v

0

v

1

v

2 world Coordinates

1) transformazione di vista 2) transformazione di proiezione 3) transformazione di viewport

y 2

-z v

0

v

1

v

2

view Coordinates (a.k.a. eye Coordinates)

y x -z v

0

v

1

v

2

v

0

v

2

v

1

v

0

v

1

v

2 screen Space

3

Normalized Device Coordinates

1

1 -1

-1 x

x

y

z v

0

v

1

v

2 object Coordinates

0) transformazione di modellazione

0

1

Scene composite (gerarchicamente)

sist coord macchina

sist coord

ruota

(6)

M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Rendering di scene composite

spazio mondo (globale) spazio oggetto ruota 1 spazio oggetto automobile

Scene graph

V

M

0

M

1

M

2

M

3

M

4

M

5

M

6

posizonamento della automobile

(rispetto al mondo) posiz. della

ruota (rispetto

all’

automobile)

(7)

M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Scene graph

V

M

0

M

1

M

2

M

3

M

4

M

5

M

6

spazio mondo spazio

vista

spazio auto 1

spazio

auto 2 spazio

auto 3

spazio

ruota A spazio ruota B

spazio

ruotaC spazio ruotaD M

0

· M

3

Settare la matrice di model view

/* globals (the current “state”) */

mat4 mv; // current model-view matrix (the “state”) ...

void draw( Mesh x ) // nb: using the global mv, p, etc /* draw scene */

mv = V; // V = view matrix

draw( track ); // assuming track object space // is also object space

mv = V * M0 ;

draw( car_chassis );

mv = V * M0 * M3;

draw( wheel );

mv = V * M0 * M4;

draw( wheel );

...

come ottimizzare e razionalizzare?

(soprattutto il numero di matix molt?)

(8)

Settare la matrice di model view

• Idea: navigare l’albero della scena depth first (scene graph)

– init: model-view = view

– seguendo i link da padre a figlio:

• cumulare la matrice di modellaz. associata (molt. a DESTRA)

– tornando al padre:

• ripristinare la matrice (come?...)

M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Stack di matrici di model-view!

I · V M

I · V · M 0

I·V·M 0 ·M 3

(9)

Stack di matrici di model-view!

• Matrice in testa allo stack = model-view corrente

• Operazioni che servono : (es. in un API / una lib)

1. sovrascrivere identità nella matrice in testa

• x inizializzazione!

2. moltiplicare matrice-in-testa per 1 matrice data

• nb: si moltiplica a destra: M

[top]

= M

[top]

* M

new

• dunque: “ultima cosa che faccio, 1ma cosa che avviene”

3. push : replicare matrice in testa in nuovo livello)

• x quando scendo di un livello!

• “salva la matrice corrente”

4. pop : scartare la matrice in testa

• x quando salgo di livello!

• “recupera l’ultima matrice salvata”

M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Scene graph

V

M

0

M

1

M

2

M

3

M

4

M

5

M

6

setIdentity mult(V) push

mult(M0)

draw( car , red);

push

mult(M3)

draw( wheel );

pop push

mult(M4)

draw( wheel );

pop

pop push

mult(M1)

drawMacchina(Green);

pop mult(Traslaz…)

mult(Rotaz…)

mult(Scale…)

oppure molte, per es

(10)

M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Un trucco

M

0

M

1

M

2

M

3

M

4

M

5

M

6

M

9

photocamera montata sull’automobile

posizonamento della camera (rispetto all’automobile)

spazio mondo

Un trucco

V

M

0

M

1

M

2

M

3

M

4

M

5

M

6

M

9

photocamera montata sull’automobile

posizonamento della camera (rispetto all’automobile)

spazio mondo spazio

vista

= ( M

2

M

9

)

-1

= M

9-1

M

2-1

(11)

Un trucco

la trasformaz di modellazione necessaria per piazzare un oggetto in una certa pos

è l’inversa

della trasformaz di vista necessaria per piazzare la camera in quella pos

M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Un altro modo ancora

per definire la matrice di vista una semplice “Trackball”:

phi theta

z -x

y

(12)

Un semplice esempio di trackball

• Interfaccia base per selezionare un punto di vista

• Due angoli (phi e theta) + distanza (ro) – (es mappati su assi X Y mouse + mousewheel)

• Utile per visualizzare un piccolo oggetto – permettere alla camera di ruotargli intorno

M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

setIdentity

mult( translation(0,0,-ro) ) mult( rotationX (-theta) ) mult( rotationY (-phi) )

Next: trasformazione di proiezione

z

y

x v

0

v

1

v

2

1

1) transformazione di vista 2) transformazione di proiezione 3) transformazione di viewport

y

-z v

0

v

1

v

2

view Coordinates

y -x -z v

0

v

1

v

2

v

0

v

2

v

1

v

0

v

1

v

2 screen Space

3

Clip

1

1 -1

-1 x

z

y

x v

0

v

1

v

2 object Coordinates

0

0) transformazione di modellazione

2

(13)

M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Trasformazione di proiezione

• Prima o poi dovremo farlo: da 3D a 2D !

y 2

-z v

0

v

1

v

2

view Coordinates (a.k.a. eye Coordinates)

y x -z v

0

v

1

v

2

v

0

v

2

v

1

Clipcoordinates

1

1 -1

-1 x

Nota:

solo per i punti! (es. i vertici dei triangoli) non per i vettori (es. le normali dei triangoli) Le normali si possono “fermare” allo spazio vista (o anche solo mondo)

( cmq lo spazio in cui che saranno utilizzate, vedi lighting dopo)

Trasformazione di proiezione

• Vecchio problema:

– (in arte, architettura progettazione)

• come riportare – oggetti 3D – su un

piano 2D

(14)

M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Spazio “clip”

• X e Y: da -1 a +1

– indipendentemente da dimensioni / proporzioni del viewport – X = -1 bordo sx X = +1 bordo dx

– Y = -1 bordo inf Y = +1 bordo sup – origine: centro del’immagine renderizzata I – se un punto ha una coord X o Y al di fuori

di [-1, +1] => non è nel quadro

• (vedremo, vale anche per la Z)

• Oggetto (o primitiva) solo parzialmente nel viewport:

«clip» it !

– andrà spezzata in una parte da mostrare, e una no – da cui il nome dello spazio

• Modo 1:

– da 3D a 2D? facile: ignoriamo la z (per ora) – per la x e y uno zoom factor k

= 1/raggio della scena che vogliamo inquadrare – matrice corrisponente:

Trasformazione di proiezione

 

 

 

 

=

1 0 0 0

0 1 0 0

0 0 0

0

0

0

k

k

P Z

(15)

M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Trasformazione di proiezione

• E' una proiezione ortogonale

– non c'è prospettiva – simula:

• il punto di vista all'infinito

• con un cannocchiale mooolto potente

• lunghezza focale infinita

– direzioni di vista costanti su tutta la scena

Trovare le differenze...

(16)

M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Trovare le differenze...

Come si svolge fisicamente il processo:

• Occhio o macchina fotografica il concetto è lo stesso:

lenti

CCD o pellicola

(2D screen buffer)

lenti

retina

(2D screen buffer)

distanza

focale distanza

focale

(17)

M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Nostro modello semplificato:

• pin-hole camera

distanza focale

-x y

-z image

plane

Parametri intrinseci della camera:

(quelli principali)

• dim image plane ( w , h ) (per ora: 2,2)

• distanza focale ( d ) oppure angolo Field of View ( FoV )

– (come ottenere uno dall’altro?)

– d si usa nei conti, ma FoV è intuitivo da settare, :

• FoV grande >60° (dist foc. piccola): «grandangolo»

• FoV piccolo <45° (dist foc. grande): «teleobiettivo»

distanza focale d

w

h Field of View (verticale)

(angolo)

(18)

Pin Hole camera

M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

per semplicità, immaginiamoci il piano immagine davanti alla camera (e nn ribaltato), piuttosto che·· dietro (e ribaltato).

(cioe’ sul piano z = - d ) (in spazio vista!)

Matematicamente

y

-z

distanza focale d

image plane

centro di proiezione (origine)

x

) , , ( x y z

) , , ( x

p

y

p

z

p

 

 

=

 

 

z y x k z y x

p p p

Nota:

non è lineare né affine;

non è reversibile.

non mantiene: rapporto fra distanze colineari

con k t.c. z

p

= − d

z d k = − /

quindi…

 

 

=

 

 

d z y d

z x d

z y x

p p p

/ /

e

(19)

M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Nostro modello semplificato:

nota: niente lenti – non modellandole,

ci siamo giocati (per ora) i "difetti" delle lenti:

• range di fuoco finito

• flares

• distorsioni radiali

Estendiamo la rappresentazione di punti e vettori in coordinate omogenee

 

 

= 1 z y x p

 

 

= 0 z y x v r

Punti: Vettori:

1 0

(20)

M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Rappresentazione di punti e vettori in coordinate omogenee

 

 

=

* z y x p

 

 

= 0 z y x v r

Punti: Vettori:

!=0 0

Estendiamo la notazione

• Esprimo i punti anche con la notazione

0

con ≠

 

 

= w

w wz wy wx p

 

 

 

 

w wz wy wx

 

 

1 z y x

divisione per 4ta comp

anche detta

normalizzazione affine

(21)

M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Estendiamo la notazione

• Per es:

 

 

 

 

10 30 10 20

 

 

 

 

1 3 1 2

 

 

 

 

1 . 0

3 . 0

1 . 0

2 . 0

 

 

 

 

2 6 2

4 sono alcune

coordinate omogene equivalenti del punto che ha le seguenti

coordinate cartesiane   

 

3 1 2

 

 

0 3 1

2 sono le

coordinate omogene del vettore che ha le

seguenti

coordinate cartesiane   

 

3 1 2

punto

vettore queste

sono in

“forma normale”

( w = 1 )

Coordinate omogenee di punti

• Il punto P di coordinate cartesiane (x,y,z) è rappresentato in coordinate omogenee

come (xw,yw,zw , w), con w qualunque (ma non 0)

• Set di coordinate omogenee diversi (x, y, z, w) e (x′, y′, z′, w′) possono rappresentare lo stesso punto;

– [quando?]

• Quando w = 1 (forma canonica ) le coord cartesiane del punto coincidono con le prime tre coord omogenee.

• Con (x, y, z, w ≠ 0) si rappresentano punti , con (x, y, z, 0) si rappresentano vettori.

• Nota: tutte le matrici di trasformazione viste fin’ora funzionanto

anche con questa notazione generalizzata! Es: VERIFICA.

(22)

M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Proiezione prospettica

 

 

 

 

=

0 / 1 0 0

0 1 0 0

0 0 1 0

0 0 0 1

d P

 

 

 

 

=

 

 

 

 

d z

z y x

z y x

/ 1

P

 

 

 

 

1 / /

d d z

y d z

x

divisione per 4ta comp

matrice di trasformazione per la

proiezione prospettica

In realtà.

la 3 e 4 si lasciano invariate…

i valori (originali) ci saranno utili !

In realtà non si scarta la terza dimensione:

ci servirà

y P

-z v

0

v

1

v

2

view Coordinates (a.k.a. eye Coordinates)

x no rm al iz za zi on e af fin e

y

z

x

clip space [ancora 3D!]

un bel CUBO!

Moltiplicazione per la matrice di

proiezione

La parte visibile casca in [-1,1] x [-1,1] x [-1,1]

quindi dette anche

"Normalized Device

Coordinates"

(23)

M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Proiezione Prospettica: che effetto fa

Proiezione Prospettica: che effetto fa

d infinito (diventa una proiezione ortogonale)

d piccolo d grande

 

 

 

 

=

0 / 1 0 0

0 1 0 0

0 0 1 0

0 0 0 1

d P

Più distorsione prospettica.

Effetto "fish-eye"

(grandangolo)

Proporzioni più mantenute Effetto "zoom"

(eg. vista dal

satellite)

(24)

Dettaglio tecnico

• Il rasterizzatore: (comportamento fisso)

– prende vertici in clip coordinates

– produce frammenti a una data screen coordinates

• cioè le «in pixel», e.s. in [0..539] x [0..479]

– applica cioè la trasf di viewport automaticamente (e, prima, anche la div per w )

quindi:

• Il vertex processor (programmabile!)

– deve produrre clip coordiantes del vert. processato (anche non in forma normale, w !=1)

M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Next: trasformazione di proiezione

x

y

z v

0

v

1

v

2

1

1) transformazione di vista 2) transformazione di proiezione 3) transformazione di viewport

y

-z v

0

v

1

v

2

view Coordinates

y x -z v

0

v

1

v

2

v

0

v

2

v

1

v

0

v

1

v

2 screen Space

Clip

1

1 -1

-1 x

x

y

z v

0

v

1

v

2 object Coordinates

0

0) transformazione di modellazione

2

3

(25)

M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Dettaglio tecnico

fra m m en ti (c ia sc un o co n sc re en c oo rd .)

Ve rti ci de lla m es h pixel

finali

(nello screen-buffer)

Ve rti ci pr oi et ta ti (c lip c oo rd s! )

Z

rasterizer triangoli

co m pu ta zi on i pe r f ra m m en to

z

y

x v

0

v

1

v

2

v

0

v

1

v

2

rasterizer segmenti rasterizer

punti

co m pu ta zi on i pe r v er tic e

OBJECT

COORDS CLIP

COORDS SCREEN

COORDS

Trasformazione di viewport

• Clip frame: (-1 , +1) x (-1 , +1)

– quadrato!

• Viewport: [ 0..resX ] x [ 0..resY ]

– rettangolare!

• Trasf. Viewport (automatica, nel rasterizz)

– scaling NON uniforme – (e traslazione)

quindi:

• per mantenere l’ aspect ratio bisogna includere

nel passaggio precedente (la proiezione!)

uno scaling NON uniforme (in verso opposto)

(26)

M a r c o T a r i n i ‧ C o m p u t e r G r a p h i c s ‧ 2 0 1 4 / 1 5 ‧ U n i v e r s i t à d e l l ’ I n s u b r i a

Problema: e l’aspect ratio?

• Matrice di proiezione con correzione dell’aspect ratio:

oppure a P

P

 

 

 

 

=

1 0 0 0

0 1 0 0

0 0 0

0 0 0 1

' P

a

P

 

 

 

 

=

1 0 0 0

0 1 0 0

0 0 1 0

0

0

0

/

1

'

Riferimenti

Documenti correlati

Furthermore, in Maeda [ 15 ] an equivalence is observed between being able to see quasi–periodic solutions, absence of resonant terms in the equations and, finally, existence

AGENDA 9:30-9:40 Welcome – introduction of participants Francesca La Torre, UNIFI 9:40-9:50 Overview of the IRDES project Francesca La Torre, UNIFI 9:50-10:05 State of the art

OBJECTIVE DATA: The purpose of this study was to perform a systematic review and metaanalysis of randomized controlled trials on oral progesterone compared with placebo or

The core of the problem is filtering the noisy trajectory data for each vehicle without altering platoon data consistency; i.e., the speeds and accelerations of following vehicles

The independent pathway could be induced by elicitors present in insect oral secretions or by plant elicitors, like OGAs, but it could be also mediated by the recently

Abstract: We have identified a variety of proteins in species of the Legionella, Aeromonas, Pseudomonas, Vibrio, Nitrosomonas, Nitrosospira, Variovorax, Halomonas, and Rhizobia

[r]

[r]