...

Trasformazioni Affini Cambi di Sistemi di riferimento Object

by user

on
Category: Documents
14

views

Report

Comments

Transcript

Trasformazioni Affini Cambi di Sistemi di riferimento Object
Cambi di Sistemi di riferimento
™Il primo step della pipeline di rendering
è quello di trasformare la scena nel
sistema di riferimento della camera
Costruzione di Interfacce
Lezione 5
Trasformazioni Affini
[email protected]
http://vcg.iei.pi.cnr.it/~cignoni
Costruzione di Interfacce - Paolo Cignoni
Object Frame
Coordinate Omogenee
™Perché ogni oggetto ha il suo sistema di
riferimento?
™Uso Multiplo di uno stesso oggetto
™Posizione parametrica
™Si dice che un punto P è
rappresentato dalla matrice
colonna p
™E un vettore w è rappresentato
dalla matrice colonna a
Costruzione di Interfacce - Paolo Cignoni
2
3
Costruzione di Interfacce - Paolo Cignoni
Trasformazioni Affini
α1 
α 
p =  2
α 3 
 
1
δ 1 
δ 
a =  2
δ 3 
 
0
4
Traslazione
™ Notare che se u è un vettore solo 9 elementi
di A sono usati nella trasformazione
™modifica i punti di un frame sommando
a tutti i punti un vettore di spostamento
d
α11 α12 α13 α14  γ 1 
α
α 22 α 23 α 24  γ 2 
Au =  21
α 31 α 32 α 33 α 34  γ 3 

 
0
0
1  0 
0
P′ = P + d
p' = p + d
™ 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
Costruzione di Interfacce - Paolo Cignoni
6
1
Traslazione
p' = p + d
p′ = Tp
Traslazione
 x ′
α x 
 x
 y ′
α 
 y
p =   p′ =   d =  y 
′
z 
α z 
z
 
 
 
1
0
1
1
0
T=
0

0
1
0
T(α x , α y , α z ) = 
0

0
0 0 αx 
1 0 αy

0 1 αz 

0 0 1
Costruzione di Interfacce - Paolo Cignoni
0 0 αx 
1 0 αy

0 1 αz 

0 0 1
7
Costruzione di Interfacce - Paolo Cignoni
Rotazione
™Caso semplice asse z, intorno
all’origine, di un angolo θ
™Possiamo considerare il problema in 2d
™angolo,
™asse
™punto di
applicazione
x = ρ cos φ
y = ρ sin φ
x′ = ρ cos(φ + θ )
(x’,y’)
θ
ρ
y ′ = ρ sin(φ + θ )
9
Rotazione
Costruzione di Interfacce - Paolo Cignoni
10
 x'
 x   x cosθ − y sin θ 
 y '
 y   x sin θ + y cosθ 
  = R (θ ) z   = 

 z' 
z
z 

 
  

1
1
1 

y = ρ sin φ
x′ = ρ cos φ cosθ − ρ sin φ sin θ = x cosθ − y sin θ
y ′ = ρ cos φ sin θ + ρ sin φ cosθ = x sin θ + y cosθ
cosθ
 sin θ
R z (θ ) = 
 0

 0
− sin θ   x 
cosθ   y 
Costruzione di Interfacce - Paolo Cignoni
(x,y)
Rotazione
x = ρ cos φ
 x′ cosθ
 y ′ =  sin θ
  
8
Rotazione
™Di una rotazione si deve specificare
Costruzione di Interfacce - Paolo Cignoni
0 0 −αx 
1 0 −αy

0 1 − αz 

0 0
1 
1
0
T −1 (α x , α y , α z ) = T( −α x ,−α y ,−α z ) 
0

0
11
− sin θ
cosθ
0
0
0 0
0 0

1 0

0 1
Costruzione di Interfacce - Paolo Cignoni
12
2
Rotazioni
0
1
0 cosθ
R X (θ ) = 
0 sin θ

0
0
 cosθ
 0
R Y (θ ) = 
 − sin θ

 0
0
− sin θ
cosθ
0
0 sin θ
1
0
0 cosθ
0
0
Rotazione inversa
™Le matrici di rotazione viste finora sono
invertibili facilmente.
0
0

0

1
R −1 (θ ) = R ( −θ )
sin( −θ ) = − sin(θ )
cos( −θ ) = cos(θ )
™Quindi basta trasporre…
0
0

0

1
Costruzione di Interfacce - Paolo Cignoni
R −1 (θ ) = R T (θ )
13
Costruzione di Interfacce - Paolo Cignoni
Rotazioni
14
Scalatura
™Finora abbiamo visto solo rotazioni
intorno all’origine e lungo gli assi.
™Una rotazione arbitraria si ottiene
componendo piu’ rotazioni e traslazioni
™ Non rigida
™ Non uniforme lungo gli assi
™ Solo centrata all’origine
x′ = β x x
y′ = β y y
z′ = β z z
β x
0
T( β x , β y , β z ) = 
0

0
Costruzione di Interfacce - Paolo Cignoni
15
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à
q = CBAp
0
0
βy
0
0
βz
0
0
0
0

0

1
Costruzione di Interfacce - Paolo Cignoni
16
Composizione di trasformazioni
™Conviene se si deve
trasformare un solo punto
™Conviene se si deve
trasformare molti punti
q = (C(B(Ap )))
q = (CBA )p
q = (C(B(Ap )))
q = (CBA )p
Costruzione di Interfacce - Paolo Cignoni
17
Costruzione di Interfacce - Paolo Cignoni
18
3
Composizione di Trasformazioni
™La moltiplicazione tra matrici NON è
commutativa
™Quindi l’ordine delle trasformazioni È
importante
Composizione di Trasformazioni
q = RTp
q = TRp
y
y
x
Costruzione di Interfacce - Paolo Cignoni
19
Rotazione intorno ad un punto
Costruzione di Interfacce - Paolo Cignoni
™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
specificato
™rimettere tutto a posto
R = R x ( −θ x )R y ( −θ y ) R z (θ z ) R y (θ y )R x (θ x )
R p = T(p)R 0T(-p)
™trovare θ y θ x non è semplice…
x
Costruzione di Interfacce - Paolo Cignoni
21
Costruzione di Interfacce - Paolo Cignoni
Shearing
™Nello Stato di OpenGL ci sono tre
matrici 4x4 di trasformazioni
™ModelView
™Project
™Texture
x′ = x + y cot θ
y′ = y
™Una di queste e’ sempre la matrice
corrente
™Tutte i comandi che modificano matrici
fanno sempre riferimento alla matrice
corrente
z′ = z
0 0
0 0

1 0

0 1
Costruzione di Interfacce - Paolo Cignoni
22
OpenGL
™Sarebbe derivabile dalle altre…
™Lo spostamento e’ proporzionale alla
coord y;
1 cot θ
0
1
H xy (θ ) = 
0
0

0
0
20
Rotazione intorno ad un asse
™Si ottiene spostando tutto il sistema di
riferimento nel punto, facendo la
rotazione e rimettendo tutto a posto
y
x
23
Costruzione di Interfacce - Paolo Cignoni
24
4
Opengl
OpenGl
™Per cambiare matrice Corrente
™glMatrixMode( *** )
™ Leggere una matrice
™ glGetDoublev(GL_MODELVIEW_MATRIX,poi
nter_to_matrix)
™ Nota: nello scambio diretto di matrici
OpenGL assume che siano memorizzate in
column major order (e.g. per colonne)
™ GL_MODELVIEW
™ GL_PROJECTION
™ GL_TEXTURE
™Per rimpiazzare la matrice
™glLoadIdentity()
™glLoadMatrix(Pointer to a matrix);
 a0
a
 1
a2

 a3
™Tutti gli altri comandi modificano
(moltiplicano per un altra matrice) la
matrice corrente.
Costruzione di Interfacce - Paolo Cignoni
in gradi!
25
OpenGL
a4
a8
a5
a9
a6
a10
a7
a11
a12 
a13 

a14 

a15 
Costruzione di Interfacce - Paolo Cignoni
26
Composizione di Matrici in Opengl
™ I comandi opengl postmoltiplicano la matrice corrente
per quella specificata
™Rotazioni
™glRotatef(angle, ax,ay,az);
™Traslazioni
™glTranslatef(dx,dy,dz);
™Scalature
q = RTp
Stato della matrice
corrente dopo il
comando a sinistra
glRotate
glTranslate
I
R
RT
y
™glScalef(sx,sy,sz)
q = TRp
I
T
TR
glTranslate
glRotate
y
™Generica
™glMultMatrix(matrix_pointer)
x
Costruzione di Interfacce - Paolo Cignoni
27
Stack di matrici
28
Stack di Matrici
™La matrice corrente puo’ essere salvata
in uno stack e recuperata
successivamente
™glPushMatrix()
™glPopMatrix()
Costruzione di Interfacce - Paolo Cignoni
x
Costruzione di Interfacce - Paolo Cignoni
29
™Il Matrix Stack e’ particolarmente utile
quando si disegnano scene strutturate
// Whole car transformation
// eg position of the car on the road
glTranslate(CarPos)
glRotate(CarDirection,0,1,0)
For(i=0;i<4;++i)
{
glPushMatrix();
// relative single wheel position
glTranslate(wheelpos[i]);
DrawWheel(i);
glPopMatrix();
}
Costruzione di Interfacce - Paolo Cignoni
30
5
Trasformazioni
Composizione di Matrici in Opengl
™Due trasformazioni vengono applicate ai
vertici della geometria che voglio
disegnare
™ I comandi opengl postmoltiplicano la matrice corrente
per quella specificata
q = RTp
glTranslate
glScale
Stato della matrice
corrente dopo il
comando a sinistra
I
T
TS
q = TRp
glScale
glTranslate
y
™Trasformazione di Modellazione
I
S
ST
™Porta la geometria nel sistema di riferimento
standard della camera
y
™Proiezione di vista
™Proietta la geometria dal sistema di riferimento
della camera sul piano di proiezione.
x
Costruzione di Interfacce - Paolo Cignoni
x
31
Elementi di base
Costruzione di Interfacce - Paolo Cignoni
32
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.
Costruzione di Interfacce - Paolo Cignoni
33
Proiezioni ortografiche classiche
34
Proiezioni Assonometriche
™ Piani di proiezione in posizione non
vincolata:
™ 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:
™ Simmetrico ai 3 assi (isometrica)
™ Simmetrico rispetto a 2 assi
(dimetrico)
™ Posizione qualsiasi (trimetrica)
™ Centro di proiezione,
all’infinito,
™ proiettori paralleli e
perpendicolari al piano di
proiezione
™ Piano di proiezione
perpendicolare agli assi del
sistema di riferimento
Costruzione di Interfacce - Paolo Cignoni
Costruzione di Interfacce - Paolo Cignoni
35
Costruzione di Interfacce - Paolo Cignoni
36
6
Proiezioni Oblique
Ortografica
™Proiettori paralleli ma non
perpendicolari al piano di proiezione
Costruzione di Interfacce - Paolo Cignoni
37
Proiezioni prospettiche
Costruzione di Interfacce - Paolo Cignoni
38
Prospettiva classica
™Caratteristica principale:
™ 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);
™diminuzione della dimensione apparente
degli oggetti all’aumentare della distanza
dall COP.
™I proiettori passano tutti per il COP
™ a) three vanishing points
™ b) two vanishing points
™ c) one vanishing points
™Caso Classico
™Il centro di proiezione simmetrico rispetto
alla finestra nel piano di proiezione
™Caso generico,
™COP svincolato dal piano di proiezione
Costruzione di Interfacce - Paolo Cignoni
39
Prospettiva Classica
40
Camera Frame
™ 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
Costruzione di Interfacce - Paolo Cignoni
Costruzione di Interfacce - Paolo Cignoni
41
™ 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
y
z
Costruzione di Interfacce - Paolo Cignoni
x
42
7
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
Costruzione di Interfacce - Paolo Cignoni
43
Piazzare la camera
Costruzione di Interfacce - Paolo Cignoni
44
™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)
0 
0 

0 1 −?d 

0 0 1 
0 0
™Del piano e’ necessario specificare
anche l’orientamento, quindi
™Si specifica VUP (view up vector)
45
Piazzare la camera
Costruzione di Interfacce - Paolo Cignoni
46
Camera axis in world space
™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.
Costruzione di Interfacce - Paolo Cignoni
™ Matrice di trasformazione
che fa parte delle matrici di
modellazione
™ Passa dalle coordinate di
mondo alle coordinate di
occhio
™Caso Generale
™Definire una camera significa definire
una proiezione (prospettica)
1 0
Costruzione di Interfacce - Paolo Cignoni
™ Come si specifica il
sistema di riferimento
della camera?
Piazzare la camera
™ 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:
1
0
T=
0

0
Sistema di riferimento della Camera
47
™ 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
x = up × z
™ L’asse y e’ semplicemente il prodotto vettore
tra gli altri due assi che ho trovato (attenti al
segno)
y = z×x
Costruzione di Interfacce - Paolo Cignoni
48
8
Cambio di Frame
™Dati due sistemi di
riferimento.
Cambio di Frame
{v1, v2 , v3 , P0 } {u1, u2 , u3 , Q0 }
u1 = γ 11v1 + γ 12 v2 + γ 13v3
™Esprimiamo uno in
termini dell’altro:
™Questo definisce la
matrice 4x4 di
cambiamento di
frame
™La matrice di
cambiamento
di frame
 v1 
 u1 
v 
u 
 2  = M 2 
 v3 
 u3 
 
 
 P0 
Q0 
u2 = γ 21v1 + γ 22v2 + γ 23v3
u3 = γ 31v1 + γ 32 v2 + γ 33v3
Q0 = γ 41v1 + γ 42v2 + γ 43v3 + P0
γ 11
γ
M =  21
γ 31

γ 41
Costruzione di Interfacce - Paolo Cignoni
γ 12
γ 22
γ 32
γ 42
γ 13
γ 23
γ 33
γ 43
0
0

0

1
™Date le due rappresentazioni a,b in
coordinate omogenee in differenti frame
(sia di un vettore che di un punto), vale:
 v1 
 v1 
 u1 
v 
v 
u 
2
2
T
T  2


⇒ a = MT b
b
=a
=b M
 v3 
 v3 
 u3 
 
 
 
Costruzione
 P0-Paolo Cignoni
 P0 di Interfacce
Q0 
T
49
50
Eye to World
™Noi abbiamo
™Camera 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.
™Esprimo il sistema di riferimento della
camera in termini dello spazio di mondo
Costruzione di Interfacce - Paolo Cignoni
Costruzione di Interfacce - Paolo Cignoni
p e = Mp w
{u, v, n, P0 } {x, y, z,0}
p w = Mp e
u = ux x + u y y + uz z
ux
u
M= y
n = nx x + n y y + nz z
 uz

P0 = p x x + p y y + pz z + 0
0
v = v x x + v y y + vz z
51
World to eye
™Per invertirla si nota che la possiamo
scrivere come un prodotto tra Rot e
Tras
nx
vy
vz
ny
nz
0
0
px 
1
0
py 
 = TR = 
pz 
0


1
0
0 0
1 0
0 1
0 0
px  ux
p y  u y

pz   u z

1  0
Costruzione di Interfacce - Paolo Cignoni
0
0
px 
py 

pz 

1
52
™Invertire Traslazioni e rotazioni è
facile…
™da world a eye
vx
nx
ny
nz
World to Eye
™A noi serve la matrice inversa:
u x
u
M= y
 uz

0
vx
vy
vz
vy
nx
vy
vz
ny
nz
0
0
M = (TR )
−1
0
0

0

1
53
−1
u x
v
=R T = x
n x

0
−1
u x
v
 x
n x

0
−1
uy
vy
uz
vz
ny
0
nz
0
uy
uz
vy
ny
vz
nz
0
0
0  1
0  0

0  0

1  0
0 0 − px 
1 0 − py 
=
0 1 − pz 

0 0
1 
− p x u x − p y u y − pz uz 
− p x v x − p y v y − pz vz 

− p x n x − p y n y − pz nz 

1

Costruzione di Interfacce - Paolo Cignoni
54
9
In opengl
Matrici di Proiezione Prospettica
™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
™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 proiezione ( x p , y p , z p )
sul piano di proiezione di un punto ( x, y , z )
Costruzione di Interfacce - Paolo Cignoni
55
Proiezione Prospettica
™ Estendiamo la nostra def di coordinate
omogenee dicendo che un punto p può essere
rappresentato come
 wx 
 wy 
p= 
con w ≠ 0
 wz 
 
w
™ 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.
x xp
=
z d
x
z/d
yp =
y
z/d
™Nota che questa trasformazione non è
lineare, né affine, né reversibile.
Costruzione di Interfacce - Paolo Cignoni
57
Coordinate Omogenee
Costruzione di Interfacce - Paolo Cignoni
58
Proiezione prospettica in opengl
™ In particolare possiamo definire la matrice
 x 
1 0 0 0
 x
 x  z/d 
 0 1 0 0
 y
 y   y 

≈

M=
p= 
q = Mp = 
 0 0 1 0
z
 z  z/d 


 

  d 
 0 0 1 / d 0
1
z / d  
 1 
Che effettua la trasformazione prospettica,
purchè si normalizzi dividendo per la quarta
componente
Costruzione di Interfacce - Paolo Cignoni
56
Coordinate Omogenee
™Si ottiene che:
xp =
Costruzione di Interfacce - Paolo Cignoni
59
™ 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
Costruzione di Interfacce - Paolo Cignoni
60
10
Proiezione prospettica in opengl
Proiezioni Ortogonali
™Caso particolare di proiezione parallela
in cui le linee di proiezione sono
perpendicolari al view plane
™La proiezione è semplicemente
™ glFrustum(xmin,xmax,ymin,ymax,near,far);
™ gluPerspective(fov,aspect,near,far)
-far
-near
xp = x
-far
yp = y
zp = 0
 x p  1
 y  0
 p = 
 z p  0
  
 1  0
-near
Costruzione di Interfacce - Paolo Cignoni
61
Proiezioni Ortogonali in OpenGL
™ glOrtho(xmin,xmax,ymin,ymax,near,far);
™ I clipping planes sono a z= -near e z=-far
Costruzione di Interfacce - Paolo Cignoni
62
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.
-far
-far
-near
-near
Costruzione di Interfacce - Paolo Cignoni
0 0 0  x 
1 0 0  y 
 
0 0 0  z 
 
0 0 0  1 
63
Window e Device coords
Costruzione di Interfacce - Paolo Cignoni
64
Normalized Device Coord
™In Opengl si distingue tra
™Normalized Device (screen) Coords
™In Opengl Perspective Transf + division
Convertono a Normalized Device Coord
™La geometria è quindi clippata sul
™Canonical View Volume
™Sono 3d e mantengono la depth
™Window Coord
™Sono 2d.
x = ±1
y = ±1
z = ±1
Costruzione di Interfacce - Paolo Cignoni
65
Costruzione di Interfacce - Paolo Cignoni
66
11
Mapping the view volume
Esempio tipico
™Un app carica/genera un oggetto in un
suo sistema di riferimento e lo vuole far
vedere.
™ Sul Canonical view Volume,
™ In questo caso la proiezione ortografica
diventa
2

x − x
min
 max

0


0


0

0
0
2
y max − y min
0
−
0
0
2
far − near
0
xmax + xmin 
xmax − xmin 

y + ymin 
− max
y max − y min 
far + near 
−

far − near 

−
(1,1,-1)
™Calcolare il bbox dell’oggetto.
™Spostare l’oggetto nell’origine
™Scalare l’oggetto fino alla dimensione
desiderata che sia compatibile con le dim
del mio volume di vista
™traslare l’oggetto nel volume di vista
(-1,-1,1)
Costruzione di Interfacce - Paolo Cignoni
67
Costruzione di Interfacce - Paolo Cignoni
68
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);
float d = 2.0/m.bbox.Diag();
glScalef(d, d, d);
glTranslate(-m.bbox.Center());
DrawMyObject();
Costruzione di Interfacce - Paolo Cignoni
69
12
Fly UP