geometriai transzformációk
DESCRIPTION
Geometriai transzformációk. Számítógépes grafika feladata. illúzió. modellezés. számok. Virtuális világ modell. képszintézis. számítás. Metafórák: optika 2D rajzolás festés analógiák. Képpontok: vörös kék zöld. mérés. Mindent számmal. axiómák. pont. számok. sík. - PowerPoint PPT PresentationTRANSCRIPT
Számítógépes grafika, PPKE-ITK, Benedek Csaba, 2010
Geometriai transzformációk
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Számítógépes grafika feladata
képszintézis
Virtuális világmodell
modellezés
Metafórák:• optika• 2D rajzolás• festés• analógiák
számítás
mérés
illúzió
Képpontok:• vörös• kék• zöld
számok
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Mindent számmal
geometria
pont
síkegyenes
metszi
illeszkedik
axiómák
algebra
számok
műveletek
egyenletmegfeleltetés
függvény
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Koordinátageometriai gyorstalpaló -Pontok, alakzatok megadása
Mindent számmal! Koordináta rendszer Koordináták megadása
Koordináta rendszerek Descartes Polár Homogén
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Koordináta rendszerek
x
y
r
Xh
Yh
w
Descartes Polár BaricentrikusHomogén
1
1
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Pontfüggvények: Mozgatás Vektor = eltolás: v Iránya és hossza (|v|) van Helyvektor
De vektor ≠ pont !!! Vektorműveletek
v = v1 + v2 (kommutatív, asszoc) v1 = v - v2 (összeadásnak van inverze) v1 = av (összeadásra disztributív)
origó
pont
helyvektor
v1 v2
vav
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Skaláris szorzás Definíció
v1v2 = |v1||v2|cos Jelentés
Egyik vektor vetülete a másikra x másik hossza Tulajdonságok
Kommutatívv1v2 = v2v1
Összeadással disztributív v3(v2+v1) = v3v2 + v3v1
vv = |v|2
v1
v2
|v1|cos
v1
v2
|v1|cos
v3
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
VektoriVektoriális szorzásális szorzás Definíció
– |v1 v2| = |v1||v2|sin – Merőleges, jobbkéz szabály
Jelentés– Paralelogramma területe, síkjára merőleges– (Egyik vektor vetülete a másikra merőleges síkra + 90 fokos
forgatás) x másik hossza
Tulajdonságok – Alternáló
v1 v2 = - v2 v1
– Összeadással disztributív v3 (v2+v1) = v3 v2 + v3 v1
v1
v2
|v1|cos
v1 v2
v2v1
|v1|sin
v1v2
90 fok
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Descartes koordinátarendszer
x i
y j
origó i
jv = xi + yj
Egyértelmű (x = vi, y = vj) Műveletek koordinátákban
Összeadás: v1 + v2 = (x1+x2)i + (y1+y2)j
Skaláris szorzás: v1 v2 = (x1i + y1 j) (x2i + y2 j) = (x1 x2 + y1y2)
Vektoriális szorzás:v1 v2 = (x1i + y1 j + z1k) (x2i + y2 j + z2k) = (y1z2 – y2z1) i + (x2z1 – x1z2) j + (x1y2 – y1x2)k
Abszolút érték:|v| = vv = x2 + y2 + z2
i j kx1 y1 z1
x2 y2 z2
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Vektor és Pont nem ugyanaz!
2D: vektor (x, y) Pont (x, y) 3D: vektor (x, y, z) Pont (x, y, z) Műveletek:
Vektor + Vektor = Vektor Pont + Vektor =Pont (eltolás)
Vektor – Vektor = Vektor Pont – Pont = Vektor
Vektor Vektor = Vektor
Vektor Vektor = Skalár
Vektor * Skalár = Vektor
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Vektor osztálystruct Vector { float x, y, z;
Vector(float x0, float y0, float z0) { x = x0; y = y0; z = z0;
} Vector operator*(float a) {
return Vector(x * a, y * a, z * a); } Vector operator+(Vector& v) { return Vector(x + v.x, y + v.y, z + v.z); } Vector operator-(Vector& v) { return Vector(x - v.x, y - v.y, z - v.z); } float operator*(Vector& v) {
return (x * v.x + y * v.y + z * v.z); } Vector operator%(Vector& v) {
return Vector(y*v.z-z*v.y, z*v.x - x*v.z, x*v.y-y*v.x); } float Length() { return sqrt(x * x + y * y + z * z); }};
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
2D egyenes
n(r – r0) = 0
nx (x – x0) + ny (y – y0) = 0
ax + by + c = 0
(x, y, 1) (a, b, c) = 0
yr0
r
v irányvektor
n normálvektor
r = r0 + v t, t [-∞,∞]
x = x0 + vx ty = y0 + vy t
x
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
SSíkík
n(r – r0) = 0
nx (x – x0) + ny (y – y0) + nz (z – z0) = 0
ax + by + cz + d = 0
(x, y, z, 1) (a, b, c, d) = 0
y
n normálvektor
z
x
r0
r
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
… és akkor tényleg folytassuk a transzformációkkal Affin transzformáció:
Párhuzamos egyeneseket párhuzamos egyenesekbe viszi
Lineáris transzformációk ilyenek
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Elemi affin transzformációk
Eltolás: r’ = r + p Skálázás: x’= Sx x; y’= Sy y;
Forgatás: x’= cosφ x- sinφ y; y’= sinφ x+ cosφ y;
r’ = rSx 0
0 Sy
r’ = rcos φsin φ
-sin φ cos φ
Fix pont: origó
Fix pont: origó
Megj: r itt sorvektor
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Elemi transzformációkElemi transzformációk
Nyírás: x’= x; y’= y + a x;
Tükrözés:
r’ = r1 a
0 1
r’ = r10
0 -1
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Transzformáció fix pontja: pivot point: (xp, yp)
Skálázás:x’= Sx (x-xp) + xp; y’= Sy (y-yp) + yp;
Forgatás:x’= (x-xp)*cos - (y-yp)* sin + xp;y’= (x- xp)*sin + (y- yp)* cos + yp;
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Alapműveletek: eltolás origó fixpontú skálázás origó középpontú forgatás
Modellezési feladatα
vméret: s=1.5x
Alap objektummodell
Várt elhelyezés
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Műveletek sorrendje
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Modellezés: 2 csuklójú robotkar
α
β
yh
w
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
x
y
x
y
β
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
x
y
β
x
y
β
h
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
α
β
y
α
β
y
h
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
α
β
x
y
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Összetett transzformáció
Affin transzformáció: r’ = r A + p A: lineáris transzformáció
forgatás, skálázás, tükrözés, nyírás, stb.
p: eltolásAmíg lineáris transzformáció:
konkatenáció r’ = (...(r A1) A2)... An) = r (A1A2... An )
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Homogén koordinátás transzformációk
Eltolás nem fér bele a 2x2-es mátrixba Dolgozzunk 3x3-as mátrixokkal
[r’, 1] = [r, 1] = [r A + p, 1]a11 a12 0
a21 a22 0
p1 p2 1
A
p
[r’,1] = (...([r,1] T1) T2)... Tn) = [r,1] (T1T2... Tn)
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Transzformációk projektív geometriai megközelítése
Homogén koordináták – nem csak az eltolás egységes kezeléséért!
3D grafika központi eleme a 3D-s világ 2D-s megjelenítése Vetítés, mint dimenziócsökkentő művelet Centrális (középponti) vetítés
Az euklideszi térben nem minden pont vetíthető centrálisan -> euklideszi helyett un. projektív geometria
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Képsíkkal párhuzamos vetítősugarakkal jellemzett pontok végtelenbe tűnnek C. projekció nem minden euklideszi pontot visz euklideszi pontba –
projektív geometria: tömjük be a lyukakat!
Centrális projekció
tárgysík
képsík
Vetítési középpont
Eltűnő egyenesIdeálispontok
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Projektív geometria Euklideszi geometria
2 pont meghatároz egy egyenest 2 különböző egyenes legfeljebb 1 pontban metszi egymást 1 ponton keresztül pontosan 1 egyenes megy át, amely nem metsz egy, a
pontra nem illeszkedő másik egyenest (párhuzamosság) centrális projekcióra lyukas (ideális pontok) algebrai alap: Descartes koordináta rendszer
Projektív geometria Projektív sík = Euklideszi sík pontjai + ideális pontok Minden egyeneshez vegyünk hozzá egy ideális pontot úgy, hogy két
egyenes akkor kapja u.a. pontot, ha párhuzamos Az egyenesek halmazát egészítsük ki az ideális pontokat tartalmazó
egyenessel 2 pont meghatároz egy egyenest 2 különböző egyenes pontosan 1 pontban metszi egymást
algebrai alap: homogén koordináták
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Homogén koordináták
Xh
Yh
w
Homogén
Szemléltetés: mechanikai rendszer súlypontja
Összsúly: h = Xh+ Yh + w
Pont homogén koordinátái:
[Xh ,Yh ,h]
[0,0,0] nem pont
P2
P1P3
Ha az összsúly h ≠ 0 a súlypont Ps euklideszi pont:Xh P1+Yh P2 +w P3
Xh+ Yh + wPs=
[Xh ,Yh ,h] és [λXh , λYh , λ h] súlypontja ugyanaz!
Ps
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Homogén-Descartes kapcsolat affin pontokra
Xh
Yh
w
[0,0][1,0]
[0,1]
r(Xh ,Yh ,h) = Xh [1,0]+Yh [0,1]+w[0,0]
h
r(Xh ,Yh ,h) = ( , )Xh
hYh
h
x = Xh
hYh
hy =
•Keressük egy adott affin (h ≠ 0) projektív térbeli pont megfelelőjét az euklideszi térben (azaz a Descartes koordinátarendszerben)•Súlypont analógia: tegyük a súlyokat i=[1 0], j=[0 1] és 0=[0,0] pontokba, és olvassuk ki a súlypont koordinátáit
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Következmények
Minden affin ponthoz van: [Xh ,Yh ,h] (x, y) [x, y,1]
Ha h 0, akkor [Xh ,Yh ,h] affin pont
( , )Xh
hYh
h
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Mi az ideális pont?h=0
x
y
(x,y,1)(2x,2y,1) = (x,y,1/2)
(x,y,1/3)
(x,y,0)
),,(lim~)0,,( 1nn yxyx
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Egyenes egyenlete
0 cybxa
átírás homogén koordinátás alakra:
0ch
Yb
h
Xa hh 0 hcYbXa hh
(a,b,c): egy egyenes; (Xh, Yh,h) egy pont
Dualitás: pont és egyenes formailag analóg – az összespontokra érvényes tétel igaz lesz az egyenesekre
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Párhuzamos egyenesek metszéspontja Párhuzamos egyenesek metszéspontja Descartes koordinátákkalDescartes koordinátákkal
a1 x + b1 y +c1 = 0a2 x + b2 y +c2 = 0
x, y
a x + b y + c1 = 0a x + b y + c2 = 0
c1 - c2 = 0 nincs megoldás
a1 /b1 /≠ a2 /b2
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Descartes: a x + by +c = 0a Xh/h + b Yh/h +c = 0
Homogén: a Xh + b Yh +c h = 0
a Xh + b Yh + c1 h = 0a Xh + b Yh + c2 h = 0
(c1 - c2) h = 0 h = 0, Xh = b, Yh = -a
Párhuzamos egyenesek metszéspontja Párhuzamos egyenesek metszéspontja homogén koordinátákkalhomogén koordinátákkal
[b ,-a ,0]
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Beágyazott modell
[Xh ,Yh ,h]
Xh
Yh
h
x
y1
[Xh ,Yh ,0]
[ , ]Xh
hYh
h(x, y) =
[0,0,0] nem pont
[Xh ,Yh ,h]·a u.a. pont
3D euklideszi tér
2D projektív sík
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Projektív egyenes paraméteres egyenlete
[X1 ,Y1 ,h1]
Xh
Yh
h
[X2 ,Y2 ,h2]
[X(t) ,Y(t) ,h(t)]=[X1 ,Y1 ,h1]·t + [X2 ,Y2 ,h2]·(1-t)
Szakasz: Konvex kombináció!
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Homogén lineáris transzformációk
Euklideszi sík affin transzformációi:
[x’, y’] = [x, y] A + p Homogén koordináták lineáris függvényei:
[Xh’ ,Yh’ ,h’] = [Xh,Yh,h] T + p Homogén lineáris transzformációk bővebbek:
a11 a12 0
a21 a22 0
p1 p2 1
T =
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Homogén lineáris transzformációk tulajdonságai Pontot-pontba, egyenest-egyenesbe
(pontba), konvex kombinációkat, konvex kombinációkba visznek át
Példa: egyenest egyenesbe:
[X(t) ,Y(t) ,h(t)]=[X1 ,Y1 ,h1]·t + [X2 ,Y2 ,h2]·(1-t)
P(t) = P1·t + P2·(1-t) // · T
P*(t) = P(t)·T = (P1·T) ·t + (P2·T) ·(1-t)
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Példa: Euklideszi geometriában nem lineáris transzformáció: Q pont vetítése e egyenesre
10 p
0 1 q
0 0 0[x, y, 1] [ x, y, px+qy]
xpx+qy
ypx+qy
Q=[x, y]
Q’=[x’, y’]
e: px+qy=1
px’+qy’=1
e
x’y’
xy=Q’ a OQ egyenesen van
O
Q’ az e egyenesen van
xpx+qy
y’ =y
px+qyy’ =
Ugyanez mátrixokkal:
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
x
y
(x,y,1)(2x,2y,1) = (x,y,1/2)
(x,y,1/3)
(x,y,0)
(-x,-y,1)=(x,y,-1)
(-2x,-2y,1)=(x,y,-1/2)
(x,y,0)
Projektív egyenes: körszerű topológia
Ideális pont
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Veszélyek: átfordulási probléma
=Projektív egyenes (topológia)
Ideális pont
Szakasz ?????
e
e
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
A projektív tér, 3D pontok homogén koordinátái
Yh
Zh
w
Homogén
Összsúly: h = Xh+ Yh + Zh + w
Pont homogén koordinátái:
[Xh ,Yh ,Zh,h]
Xh
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
A projektív tér egyenesei és síkjai
Egyenes:
Sík:
[X(t),Y(t),Z(t),h(t)]=[X1,Y1,Z1,h1]·t + [X2 ,Y2,Z2,h2]·(1-t)
Euklideszi, Descartes koord: nx x + ny y + nz z + d = 0Euklideszi, homogén koord: nx Xh/h + ny Yh/h + nz Zh/h +d = 0
Projektív: nx· Xh + ny ·Yh + nz · Zh +d · h = 0
[Xh ,Yh ,Zh,h]· = 0
nx
ny
nz
d
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Invertálható homogén lineáris transzformációk síkot síkba visznek át
P·NT = 0
TP P* = P·T
T-1
(P*·T-1)·NT = 0P*·(T-1·NT) = 0P*·(N·(T-1)T)T = 0P*·N*T = 0
N*=N·(T-1)T Inverse-transpose
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Projektív geometria a Projektív geometria a számítógépes grafikábanszámítógépes grafikában
Világ:Euklideszi tér Projektív tér
Projektív térKép:
Euklideszi tér
[x,y,z] (x, y,z,1)(Xh ,Yh ,Zh ,h) (T1T2... Tn)
[ , , ]Xh
hYh
hZh
h
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Koordináta-rendszer transzformációk
Analógia a műtermi fényképkészítés és az OpenGL képalkotás között Fényképezőgép elhelyezése, ráirányítása a
lefényképezendő térrészre - nézőpontba transzformálás
A lefényképezendő objektumok elhelyezése a kívánt pozícióba –modell-transzformáció
A megfelelő lencse kiválasztása, zoom beállítása – vetítési transzformáció
Papírkép a negatívról – képmező transzformálás
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
OpenGL transzformációk Homogén lineáris transzformáció (p itt
oszlopvektor)
p’=Mp Transzformációk kompozíciója
p’=M1p és p’’= M2p’ → p’’=M2M1p
a közös transzformáció M2M1
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
OpenGL csővezeték
Virtuális világKamera transzformáció,illumináció
Perspektívtranszformáció +Vágás homogén koordinátákban
1.2.
Képernyő transzf+Raszterizáció+interpolációmegjelenítés
szín mélység
MODELVIEW PROJECTION
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Transzformációk
xyzh
Modelviewmatrix
Stack
Projectionmatrix
Stack
Homogénosztás
Viewporttranszf.
window
Lokálismod. kamera homogén
Normalizáltképernyő
illumináció
vágás Backface cullingRaszterizáció,textúrázás
modellező, kamera
(nyírás), normalizáló perspektív
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
OpenGL transzformációs mátrixok kezelése
Műveletek: aktuális mátrix kijelölése, betöltése, vagy megszorzása jobbról egy új mátrixszal
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
OpenGL transzformációs mátrixok kezelése void glMatrixMode(GLenum mode);
Állapotváltozó: megadjuk, hogy melyik mátrixot akarjuk a következő parancsokkal állítani
mode lehet: GL_MODELVIEW – modell-nézeti transzformáció (objektumok
és a kamera elhelyezkedése és iránya) GL_PROJECTION – kamera modell kiválasztás és fókuszálás GL_TEXTURE – textúra
glLoadIdentity(); aktuális mátrix beállítása az egységmátrixra
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Mátrix betöltése, szabad szorzása void glLoadMatrix{fd}(const TYPE *m);
m pointer által címzett 16 elemű vektor elemeit betölti az aktuális mátrixba oszlopfolytonosan
void glMultMatrix{fd}(const TYPE *m); m pointer által címzett 16 elemű vektor elemeiből
képzett mátrixszal szorozza az aktuális mátrixot
m1m5 m9 m13m2 m6 m10 m14m3 m7 m11 m15m4 m8 m12 m16
M:
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
OpenGL transzformációs mátrixok kezelése void glTranslate{fd}(TYPE x, TYPE y, TYPE z) előállítja az [x,y,z,1]T vektorral való eltolás mátrixát és
megszorozza vele (jobbról) a kurrens mátrixot void glRotate{fd}(TYPE angle, TYPE x, TYPE y, TYPE z) előállítja az origón áthaladó, [x,y,z]T irányvektorú
egyenes körül angle szöggel elforgató mátrixot és megszorozza vele a kurrens mátrixot. A szög előjeles, fokban kell megadni
void glScale{fd}(TYPE x, TYPE y, TYPE z); - skálázás
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Nézőpont és nézeti irány beállítása Alapértelmezés: nézőpont a modellkoordináta-
rendszer origója, nézési irány a negatív z-tengely Új nézőpont megadása:
OpenGL: az objektumot toljuk/forgatjuk ellentétes irányban (glTranslate*, glRotate*)
GLU: a nézőpont és a kamera nézet iránya közvetlenül is megadható
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Nézőpont és nézeti irány beállítása void gluLookAt(GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz)
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
OpenGL transzform. kompozíció Forgatás (R) majd eltolás (T) elvégzése
p’=Rp és p’’= Tp’ → p’’=TRp a közös transzformáció TR: OpenGL mátrixszorzás jobbról történik, ezért a
mátrixokat a végrehajtás sorrendjével ellentétes sorrendben kell megadni:(1) lépés glLoadIdentity();
M:=E egységmátrix
(2) lépés glTranslated(x,y,z);
M:=M∙T=E∙T = T
(3) lépés glRotated(angle,x,y,z);
M:=M∙R=E∙T∙R = TR
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
MODELVIEW Transzformáció
sorrend
Kamera koordinátarendszer
glMatrixMode(GL_MODELVIEW);
glLoadIdentity( );gluLookAt(eyex, eyey, eyez, vrpx, vrpy, vrpz,upx, upy, upz); //VIEW
glTranslatef(px, py,pz); //MODELglRotatef(ang, axisx,axisy,axisz); glScalef(sx, sy, sz);
glMultMatrixf( mat[4][4] );
ux uy uz 0vx vy vz 0wx wy wz 0 eye 1
-1
eye
u
v
w
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
OpenGL vetítési transzfromációk Centrális vetítés (valószerű képek):
glFrustum() glPerspective()
Merőleges vetítés (méret/méretarány helyes képek): glOrtho() glOrtho2D()
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Projektív transzformáció void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far);
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Projektív transzformáció void gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble near, GLdouble far);
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Merőleges vetítés void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far); a nézőpont helye itt közömbös, csak a nézési
irány számít
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
2D alakzatok ábrázolása void gluOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top); 2D: nem kell közeli és távoli vágósíkot megadni (automatikusan
[-1,1])
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
PROJECTION Transzformáció
glMatrixMode(GL_PROJECTION); glLoadIdentity( );
gluPerspective(fov, asp, fp, bp);
1/(tg(fov/2)·asp) 0 0 00 1/tg(fov/2) 0 00 0 -(fp+bp)/(bp-fp) -10 0 -2fp*bp/(bp-fp) 0
Kamera koordinátarendszer Homogén
(1, 1, 1, 1)
(-1,-1,-1, 1)
fp bp
Projekció után homogén osztás: normalizált koordináták
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Képmező transzformáció void glViewport(GLint x, GLint y, GLsizei width, GLsizei height); képmező:
téglalap alakú rajzterület a képernyőn oldalai párhuzamosak az ablak oldalaival (x,y): a képmező bal alsó sarka width, height: a képmező szélessége, hosszúsága
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Képernyő Transzformáció
glViewport( 0, 0, width, height );
Normalizált képernyő:Vágás és homogén osztás után
1(-1,-1,-1)
(1, 1, 1)
Számítógépes Grafika 2010, PPKE ITK, Benedek CsabaTanagyag forrás ® Szirmay-Kalos László, BME
Aktuális transzf. mentése és újra töltése void glPushMatrix(void);
A glMatrixMode() paranccsal beállított kurrens verem minden elemét egy szinttel lejjebb tolja. A legfelső (kurrens) mátrix a második mátrix másolata lesz
void glPopMatrix(void); A glMatrixMode() paranccsal beállított kurrens verem
legfelsőbb elemét eldobja, és minden további elemet egy szinttel feljebb tol.