transformace (2) - cvut.cz · p = [x, y, z]t homogenní souřadnice ve 2d pgr 18 výhody...
TRANSCRIPT
Transformace (2)
Petr FelkelKatedra počítačové grafiky a interakce, ČVUT FELmístnost KN:E-413 (Karlovo náměstí, budova E)
E-mail: [email protected]
S použitím materiálů Bohuslava Hudce, Jaroslava Sloupa a Vlastimila Havrana
Poslední změna: 3.5.2016
Opakování transformací z minulaTransformace (2) Projekce a viewport Homogenní souřadnice Rotace podle Eulerových úhlů a Gimbal lock
Osnova
PGR 2
Logické kroky při transformaci vrcholů
PGR
Modelovací a pohledovátransformace
ModelovacíTransformace
Pohledovátransformace
modelovacísouřadnice
světovésouřadnice
souřadnice kamery (oka)
vrchol
Souřadnice okna
Projekční transformace
+Ořezání (clipping)
Transforma-ce záběru (Viewport)
Normalizovanésouřadnice
zařízení
Per-spektiv-
ní dělení
ořezávácísouřadnice
3D 2D
3= =, ,
=== … maticově
= 1
- daná, pozice objektů i kamery se definuje vůči ní = objekt někam umístěný do světa= druhý objekt umístěný jinam do světa , modelové matice – matice přechodu z souřadnicové
soustavy světa do lokální soustavy objektu (lokální = globální * )Převádí lokální souřadnice modelu do globálních.
= soustava kamery = = pohledová matice == =
Opakování: Souřadnicové soustavy v PG
PGR 4
Souřadnice bodu objektu v různých souř. soustavách:Rovnost bází: = == → =
Souřadnice bodu objektu v různých soustavách souřadnic
PGR 5PGR
Dvě souřadné soustavy, lišící se počátky a směry os
==x
y
= 1 Průměty bázových vektorů do bází
⇒ …. Transformace maticí M vzhledem k bázi = =
Transformace vzhledem k bázi
PGR 6
k lokální soustavě objektu
ke světovým souřadnicím
k soustavě souřadnic kamery
Transformace vzhledem:
V soustavě : ⇒ V soustavě : ⇒ Zpět vůči : ,
Transformace vzhledem k bázi / soustavě souřadnic
PGR 7
===
Analogie s fotoaparátem
B. Beneš
PGR 8
Vizualizace transformací - zopakování
PGR 9
clip spacenormalized space
PGR
Projekční transformace
wzyx
Souřadnice okna
Modelovací a pohledovátransformace
modelovacíTransformace
Pohledovátransformace
Projekční transformace
+Ořezání (clipping)
Transforma-ce záběru (Viewport)
modelovacísouřadnice
světovésouřadnice
souřadnice kamery (oka)
Normalizovanésouřadnice
zařízení
vrcholPer-
spektiv-ní
dělení
ořezávacísouřadnice
3D 2D
10
M V P
definuje tvar pohledového objemu (viewing volume, frustrum) pohledový objem „komolý jehlan“
• určuje, jak se objekt pomítá na průmětnu (perspektivní či paralelní projekce) – VS
• definuje polohu ořezávacích rovin, tj., které objekty či jejich části budou oříznuty (clipping planes) – fixní část
• zadává se v souřadné soustavě kamery
OpenGL umožňuje jakoukoliv projekci definovanou uživatelem projekce obecně NENÍ afinní transformací
(projekční matice nemá poslední řádek ve tvaru 0 0 0 1) nutné jsou funkce vytvářející matice pro
• ortografickou projekci (paralelní)• perspektivní projekci
Projekční transformace - P
PGR 11
Základ paralelního zobrazení (ortho)
PGR 12
= near plane
Projection plane
( , − ) (y, )viewer
0
Základ perspektivního zobrazení
PGR 13
Projection plane
( , − )(y, )
0viewer
Similar triangles:
Paralelní projekce
PGR 14
vytvoří matici pro paralelní promítání
mat4 glm::ortho( float left, float right,float bottom, float top, float near, float far);
průmětna
pohledový objem je kvádr [left, bottom, *] a
[right, top, *] = body na blízké a vzdálené ořezávací rovině (* = near a far),
jsou mapovány do dolního levého a pravého horního rohu formátu (viewport)
Perspektivní projekce
PGR 15
mat4 glm::frustum( float left, float right,float bottom, float top,float near, float far);
průmětna vytvoří matici pro perspektivní promítání pohledový objem je komolý jehlan podstavy rovnoběžné, kolmé na vektor
pohledu menší podstava =
průmětna objekty blíže zvětšené
(zaberou relativně větší část pohledového objemu)
Perspektivní projekce
PGR 16
fovy = úhel záběru ve směru y,
• rozsah 0.0, • spolu s near určí h
aspect je poměr šířky ku výšce pohledového objemu (w / h)w = aspect * h;
hodnoty near a far musí být kladné (near > 0 !!!)
mat4 glm::perspective ( float fovy, float aspect,float near, float far );
jiný způsob definice parametrů pro perspektivní matici vytvoří matici pro symetrické perspektivní promítání
průmětna
bod je reprezentován svými souřadnicemi P = [x, y, z]tv poč. grafice používáme homogenní souřadnice P = [x, y, z, w]t
Kartézské souřadnice homogenní souřadnice
P = [x, y, z]t zvolit w0 P = [w.x, w.y, w.z, w]t
příklad: bod v kartézských souřadnicích [2, 3, 5]t.Jaké jsou jeho homogenní souřadnice?
[w.2, w.3, w.5, w]t a w0 např. [2, 3, 5, 1]t, [4, 6, 10, 2]t, atd.
homogenní souřadnice Kartézské souřadnice
P = [x, y, z, w]t P = [x/w, y/w, z/w]t w0, wR
příklad : bod v homogenních souřadnicích [9, 3, 12, 3]t.Jaké jsou jeho kartézské souřadnice?
P = [9/3, 3/3, 12/3]t = [3, 1, 4]t
Homogenní souřadnice
PGR 17
Pro body volíme w = 1
Geometrická interpretace ve 2D: bodům s homogenními souřadnicemi P = [w.x, w.y, w.z, w]t , w 0Tvoří přímku bez počátku, která je celá obrazem bodu P = [x, y, z]t
Homogenní souřadnice ve 2D
PGR 18
Výhody homogenních souřadnic Afinní transformace i projekce lze zapsat jednou maticí
(ve 3D maticí 4x4) Skládání transformací jako násobení matic Kompaktní reprezentace bodů (w 0) a vektorů (w = 0)
w
yO
1
[xp, yp,1]t
[w xp, w yp, w]t
k
Pxp
yp
[kxp, kyp, k]t
x
Pro vektory je w = 0Pro body volíme w = 1
Matrices and transformations
PGR 19
0000 0 0 1Linear
transformationmatrix
ℎ0 0 0 1Affine
transformationmatrix
0 00 00 0 − −0 0 −1 0Perspective
transformationmatrix
Transformations
PGR 20[Bittner APG]
Odvození paralelní projekční matice (Ortho)
PGR
lrllr
lrxx
lrlxx
xxlrlx
n
n
nn
22
12
21
)1(1)1(
Princip: Zachová x a y. Ignoruje z
Plus normalizace souřadnic: intervaly l, rt, bn, f 1, 1x
y
z
lrlrx
lrxn
2
btbty
btyn
2
1nzHloubku ale potřebujeme
na určení viditelnosti
nx
x rl
11
dzyyxx
M
'''
0000d00000100001
21
Odvození paralelní projekční matice (Ortho)
PGR 22
Odvození hloubky zn
• near a far se zapisují v orthokladně (vzdálenost od oka),
• jsou ale na záporné ose z,• proto ve vzorcích záporné
nfnnf
nfzz
nfnf
nfnzz
znfnz
znf
nz
n
n
n
n
22
2
21)1(1)1(
)()(
x
y
z
nz
z fn
11
lrlrx
lrxn
2
btbty
btyn
2
nfnfz
nfzn
2
a , :pokud Platí, fnbtrl
Odvození paralelní projekční matice (Ortho)
PGR 23
Výsledná matice
x
y
z
lrlrx
lrxn
2
btbtx
btyn
2
nfnfz
nfzn
2
a , :pokud Platí, fnbtrl
btbty
btyn
2
2− 0 0 − +−0 2− 0 − +−0 0 − 2− − +−0 0 0 1
Základ perspektivního zobrazení
PGR 24
Projection plane
( , − )(y, )
0viewer
Similar triangles:
lrlrx
lrxn
2
btbty
btyn
2
Odvození perspektivní projekční matice (Frustum)
PGR 26
y
z
Odvození X a Y• Dosadíme = −
lrlrx
zlrnxn
12
btbty
zbtnyn
12
Plus normalizace souřadnic:
zlrlrx
lrnxz n
2
zbtbty
btnyz n
2
).( z
).( z
nfnf
znfnfzn
)(
12)( z
nfnfz
nfnfzz n
2
Odvození dále:
zw
= −= −
Odvození perspektivní projekční matice (Frustum)
PGR 27
B zAnz
y
z
Mapování hloubky• Interpoluje se 1/z• Proto ve tvaru
nfnf
znfnfzn
)(
12 ).( znf
nfznfnfzz n
2
Plus normalizace souřadnice z
B f-
A1aB n-
A1
nfnfA
2
nfnfB
• Dosadíme -n -1, -f 1
Odvození A a B na dalším slajdu
Odvození perspektivní projekční matice (Frustum)
PGR 28
B f-
A1a1/B n-
A1
Odvození A a B: Dosadíme -n -1, -f 1
nfnfA
nfnfA
f-A
nA
--------------
B-fA
- BnA
2
2
1
1
nfnfB
nfnf
nffB
nff
nnf
nf
B
nfnfA
nAB
2
121
2
2
1
B zAnz
Odvození perspektivní projekční matice (Frustum)
PGR 29
Výsledná maticea, :pokudPlatí fnbtrl
x
y
z
zlrlrx
lrnxz n
2
zbtbty
btnyz n
2
nfnfz
nfnfzz n
2
zw
2− 0 +− 00 2− +− 00 0 − +− − 2−0 0 −1 0
Perspektivní dělení – 1/w
PGR 30
wzyx
Souřadnice okna
Modelovací a pohledovátransformace
modelovacíTransformace
Pohledovátransformace
Projekční transformace
+Ořezání (clipping)
Transforma-ce záběru (Viewport)
modelovacísouřadnice
světovésouřadnice
souřadnice kamery (oka)
Normalizovanésouřadnice
zařízení
vrcholPer-
spektiv-ní
dělení
ořezovésouřadnice
3D 2D
Division by w
PGR 31
=2− 0 +− 00 2− +− 00 0 − +− − 2−0 0 −1 0
= / //
Matrix multiplication (from eye to clip coordinates)
Division by (from clip to normalized coordinates) = division by
Transformace záběru
PGR 32
wzyx
Souřadnice okna
Modelovací a pohledovátransformace
modelovacíTransformace
Pohledovátransformace
Projekční transformace
+Ořezání (clipping)
Transforma-ce záběru (Viewport)
modelovacísouřadnice
světovésouřadnice
souřadnice kamery (oka)
Normalizovanésouřadnice
zařízení
vrcholPer-
spektiv-ní
dělení
ořezovésouřadnice
3D 2D
Transformace pracoviště (Viewport)
PGR 33
Formát (viewport) = obdélníková oblast okna, do které se mapuje průmětna (= promítací rovina)
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height);
[x, y] je levý dolní roh formátu (viewport), width a height je šířka a výška formátu …v souřadnicích okna –
v pixelech pro knihovnu GLUT se nastavuje v callback funkci reshape poměr stran formátu by měl být stejný jako poměr stran průmětny jinak zkreslení obrazu GLUT: implicitně na celé okno (0,0,w, h)
Transformace pracoviště (Viewport)
PGR 34
-1 1-1
1
Normalizované souřadnice zařízení
Viewport
screen
yx
w
h
Souřadnice na obrazovce-1
1
zw na viditelnost (Z-buffer)
= + 2= + ℎ2= 2 + = ℎ2 + = −2 + +2
Transformace pracoviště (maticově)
PGR 35
-1 1-1
1
Normalizované souřadnice zařízení
Viewport
screen
yx
w
h
Souřadnice na obrazovce-1
1
zw na viditelnost (Z-buffer)
2 0 0 + 20 ℎ2 0 + ℎ20 0 −2 +20 0 0 1= + 2= + ℎ2
Dotaz na aktuální formát (transformaci pracoviště)int format[4];glGetIntegerv( GL_VIEWPORT, format);Význam: x, y, w, h x = format[0],
y = format[1],w = format[2],h = format[3],
Transformace pracoviště (Viewport)
PGR 36
… aby zůstala kružnice kulatá
v proceduře reshape(int w, int h) registrována jako Callback …glutReshapeFunc(reshape);
Dva způsobya) zmenšením formátub) protažením projekce
Zachování poměru stran obrazu
PGR 37
a) zmenšením formátu - zbude nevyužitá plocha okna
if( w > h ) // okno širokéglViewport((w-h)/2, 0, h, h);
else // okno vysokéglViewport(0, (h-w)/2, w, w);
Zachování poměru stran obrazu
38w > h w <= h
Nevyužitá plocha
zkreslené nezkreslenézkreslené nezkreslené
Nevyužitá plocha PGR
glViewport(0, 0, w, h);x, y, w, h
glViewport((w-h)/2, 0, h, h);
b) protažením projekce (zvětší se pohledový objem)GLfloat aspect = (GLfloat) w / (GLfloat) h;if( aspect > 1.0 ) // w > h => okno široké
m = glm::ortho(-1.15*aspect, 1.15*aspect, -1.15, 1.15, -10, 10);else // left, right, bottom, top, near, far
m = glm::ortho(-1.15, 1.15, -1.15/aspect, 1.15/aspect, -10, 10);glm::frustum(-1.15, 1.15, -1.15/aspect, 1.15/aspect, 0.1, 10);
Obdobně: glm::perspective(60.0, aspect, 0.1, 10);
Zachování poměru stran obrazu
PGR 39w > h => okno široké left*aspect right*aspect
zkreslené nezkreslené
Aspect
PGR 40aspect = 2.7
aspect = w / h
aspect = 0.5
glm::perspective(60.0, aspect, 0.1, 10);
PGR 41
Rotace podle Eulerových úhlů a Gimbal lock
Eulerovy úhly = pitch-yaw-roll (výška, kurs, rotace) komplexní otočení rozdělíme na otočení dle os X, Y, Z
Rotace dle Eulerových úhlů
PGR 42
cos() -sin() 0 0 sin() cos() 0 0 0 0 1 0 0 0 0 1
Rotate(, 0, 0, 1)
cos() 0 sin() 0 0 1 0 0 -sin() 0 cos() 0 0 0 0 1
Rotate(, 0, 1, 0)
1 0 0 0 0 cos() -sin() 0 0 sin() cos() 0 0 0 0 1
Rotate(, 1, 0, 0)
X Y Z
Základní orientace „Pitch-Yaw-Roll“
PGR 43
[NASA]
Základní orientace „Pitch-Yaw-Roll“
PGR 44
Pitch Yaw Roll
Výškovky Kormidlo Křidélka
[NASA]
Gimbal [‘džimbl] – otočná podpěra
PGR 45
[Wikipedia]- Původní použití u gyroskopů a upevnění kompasů, kamen a sklenic na lodích od antiky.
- Tři gimbals spojené dohromady + závaží či setrvačník
Eulerovy úhly = pitch-yaw-roll (výška, kurs, rotace) komplexní otočení rozdělíme na otočení podle os X, Y, Z dělá se postupně => otočením druhé osy v hierarchii o 90° splynou
osy a dojde ke ztrátě jednoho stupně volnosti (gimbal lock)
Rotace a „Gimbal lock“ [‘džimbl lok]
PGR 46
Pořadí rotací v programu:Rotate(a, 1, 0, 0) // X 3 Rotate(90, 0, 1, 0) // Y 2Rotate(c, 0, 0, 1) // Z 1
Z splyne s XRotace kolem X s modelem otočeným o 90°dle Y dělá totéž, co rotace kolem Z
x
y
z
1
xy
z
2x
y
z31
Ztráta jednoho stupně „Gimbal Lock“
PGR 47
[Wikipedia]
[http://www.fho-emden.de/~hoffmann/gimbal09082002.pdf]
Vysvětlení
PGR 48
Composition[rax, r90y, rbz] = rax * r90y * rbz
=
Otočením o 90º okolo osy Y (prostřední při skládání transformací) se ztratímožnost otáčení okolo osy X (osa X splyne s osou Z).
Místo toho se otáčí okolo osy Z původního modelu. Výsledný úhel otočení vznikne jako součet požadovaných úhlů otočení kolem X a Z
Vysvětlení
PGR 49
Rotaci podle obecné osy (místo skládání rotací podle Eulerových úhlů)
Používat kvaterniony (quaternions)
Jak nezpůsobit gimbal lock
PGR 50