vektorok különbsége

52
Vektorok különbsége e x e-x szempozíció árnyalt felületi pont pozíciója nézeti irány (nem normalizált) e-x = [e x -x x e y -x y e z -x z ]

Upload: kizzy

Post on 21-Jan-2016

37 views

Category:

Documents


0 download

DESCRIPTION

Vektorok különbsége. e-x = [e x -x x e y -x y e z -x z ]. szempozíció. nézeti irány (nem normalizált). e. e-x. x. árnyalt felületi pont pozíciója. Vektorok hossza. |v| = √ ( v x *v x + v y *v y + v z *v z ). | v |. v. Normaliz ált nézeti irány. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Vektorok különbsége

Vektorok különbsége

e

x

e-x

szempozíció

árnyalt felületi pontpozíciója

nézeti irány(nem normalizált)

e-x = [ex-xx ey-xy ez-xz]

Page 2: Vektorok különbsége

Vektorok hossza

v

|v| = √ (vx*vx + vy*vy + vz*vz)

|v|

Page 3: Vektorok különbsége

Normalizált nézeti irány

e

x

szempozíció

árnyalt felületi pontpozíciója

V: nézeti irány(normalizált)

e-x = [ex-xx ey-xy ez-xz]

V= (e-x)/|e-x|

Page 4: Vektorok különbsége

Két vektor skalárszorzata(dot product)

a

b

a·b = axbx + ayby + azbz

skalár(egy szám)

a·b = |a||b| cos

Page 5: Vektorok különbsége

Mire jó a skalárszorzat? 1.v-nek n irányú része

v

n n egységnyi hosszú kell legyen

vtöbbi

vn

|vn| = |v| cos = |v| |n| cos = v·n

vn = n |vn|

derékszögűháromszög

|n| = 1

skalárszorzat

Page 6: Vektorok különbsége

Például: falról visszapattanó labda, tökéletes visszaverődés iránya

V

NVmerőleges

Vpárhuzamos

V: bejövő sebesség

kimenő sebesség

Vout

V = Vpárhuzamos + Vmerőleges

Vout = Vpárhuzamos - Vmerőleges

Fal

N: fal normálvektora

Vmerőleges = -N(V·(-N))

Vpárhuzamos = V - Vmerőleges

Vout = V - 2N(V·N)

Page 7: Vektorok különbsége

Mire jó a skalárszorzat? 2.a és b közötti szög cosinusa

a

b a és b egységnyi hosszú kell legyen

cos = |a| |b| cos = a·b

|a| = |b| = 1

Page 8: Vektorok különbsége

Például: diffúz felület árnyalása

L

N

L: fényirány (normalizált)

kimenő radiancia(nem függ a nézeti iránytól, mert diffúz)

Iout

Fal

N: árnyalt felületnormálvektora(normalizált)

Iout = Iin kd cos

Iin: bejövő radiancia

kd: diffúz BRDF paraméter

: fény beesési szöge

Iout = Iin kd L·N

Page 9: Vektorok különbsége

Két vektor vektoriális szorzata(keresztszorzat, cross product)

a

b

a×b = [aybz-azby azbx-axbz axby-aybx]

a×b

|a×b| = |a||b|sin

a·|a×b| = 0 b·|a×b| = 0

merőleges a-ra és b-re

Page 10: Vektorok különbsége

Mire jó a keresztszorzat?

• Ha valami vektorra kell egy merőleges– keresztszorozzuk pl. a felfele vektorral

• (pl. [0, 0, 1])

• Két vektorra is merőleges– a két vektor keresztszorzata– ha nem 1 hosszúak vagy nem derékszögben

állnak ne felejtsünk el normalizálni

• Példa: paraméteres felület normálvektora egy pontban

Page 11: Vektorok különbsége

Példa: felület normálvektora

z(u,v) = sin(2u + 3v )

x(u,v) = uy(u,v) = v

felület paraméteres egyenlete legyen:

Mi a normálvektora a u=v=0 pontban?

z(u,v) / u = cos(2u + 3v) 2 = 2

x(u,v) / u = 1y(u,v) / u = 0

z(u,v) / v = cos(2u + 3v) 3 = 3

x(u,v) / v = 0y(u,v) / v = 1

T érintő (tangens)

B érintő (binormál)

N = B×T = [0-2 0-3 1-0] = [-2 -3 1]

normalizálás: / sqrt(14)

Page 12: Vektorok különbsége

Koordináta-rendszerek

• Egy pont valamilyen viszonyítási ponthoz képest (origo) adható meg kitüntetett vektorok lineáris kombinációjaként (bázisvektorok, koordinátatengely-irányok)

• Más origóval és irányokkal ugyanannak a pontnak mások a koordinátái

• Más számításokhoz más bázisok előnyösek

Page 13: Vektorok különbsége

Modellezési: ebben adottak a koordináták

OM

origóMx

My

[3 4]P = OM + 3Mx + 4My

Page 14: Vektorok különbsége

Világ: kitüntetett fő-rendszer ebben legyen minden az árnyaláshoz

OW

origóWx

WyLokális

Model [3 4]

P = 3Mx + 4M

y

modell origo itt van[3 3]

Ezekkel adjuk meg az objektum

elhelyezkedésétMx = 3/25 Wx – 4/25 Wy

My = 4/25 Wx + 3/25 Wy

Page 15: Vektorok különbsége

Világkoordináták kiszámolása

Wx

WyLokális

Model [3 4]

P = 3Mx + 4M

y

OM

[3,3]

Mx = 3/25 Wx – 4/25 Wy

My = 4/25 Wx + 3/25 Wy

P = 4Wx + 3Wy

[4 3]

OW

origó

P = OM + 3Mx + 4My

P = 3 Wx+ 3 Wy + 3 (3/25 Wx – 4/25 Wy)+4 (4/25 Wy + 3/25 Wy) =

3 Wx+ 3 Wy + (9 + 16)/25 Wx + (12-12) Wy =4Wx + 3Wy

Page 16: Vektorok különbsége

Ez a számítás mátrix formában (modellezési transzformáció)

[4 3 1] = [3 4 1]

3/25 -4/25 0

4/25 3/25 0

3 3 1

P = 3 Wx+ 3 Wy + 3 (3/25 Wx – 4/25 Wy)+4 (4/25 Wy + 3/25 Wy)

[4 3] = [3+3*3/25+4*4/25 3-3*4/25+4*3/25]

OM

My

Mx

mindig fix

mindig fix

Page 17: Vektorok különbsége

Árnyalás világ-koordinátákban

OW

origóWx

Wy

[4 3]

[4 1]

[6 3]

S fényforrás pozíciója

E szem pozíciójaX árnyalt felületi pont

LL megvilágítás iránya

V

V nézeti irány

Minden világ-ban adott

L = (S-X)/|S-X|V = (E-X)/|E-X|

Page 18: Vektorok különbsége

Hova kell ezt rajzolni a képernyőn?

• Az összes többi transzformáció ennek a kiszámolására megy– kamera transzformáció

• hol van a pont a kamerához képest

– vetítési transzformáció• hova vetül ez az ablak téglalapjára

– viewport transzformáció• melyik pixel

[-1 -1]

[1 1]

[0 0][345 234]

Page 19: Vektorok különbsége

Kamera koordináta rendszer

OW

origóWx

Wy

[4 3][6 3]

Cx = [-1 1]

Cz = [-1 -1]

[4 3] = E + xC*Cx + zC*Cz

kamera koordináták

egyenletrendszer x,z-re

E

4 = 6 + xC*(-1) + zC*(-1)3 = 3 + xC*(-1) + zC*(1)xC= 1, zC = 1

Page 20: Vektorok különbsége

Kamera koordináta számítás mátrix formában

(NEM a kamera trafó mátrix)

[4 3 1] = [1 1 1]

-1 -1 0

-1 1 0

6 3 1 E

Cy

Cx

mindig fix

mindig fix

[4 3] = E + xC*Cx + zC*Cz [4 3] = E + xC*[-1 -1] + zC*[-1 1]

Page 21: Vektorok különbsége

Kamera trafó mátrix

[4 3 1] = [1 1 1]

-1 -1 0

-1 1 0

6 3 1

[4 3 1] = [1 1 1]

-1 -1 0

-1 1 0

6 3 1

-1

Page 22: Vektorok különbsége

Képernyő koordináta rendszer

OW

origóWx

Wyablak a virtuális világra

Jz

Jx

xJ

zJ

hova vetül a képernyőn

milyen messze(takaráshoz kell)

1

Page 23: Vektorok különbsége

Képernyőkoordináta számítása

ablak a virtuális világra

Jz

xC = xJ * zC

xJ = xC / zC xC zC

1

hasonló háromszögek

Jx

xJ

zJ

Page 24: Vektorok különbsége

Ha a látószög nem 90 fok

ablak a virtuális világra

Jz

xC = xJ * zC

xJ = xC / zC xC zC

1

hasonló háromszögek Jx

xJ

zJ

Jx az egységOsztani kell az ablakunk fél szélességével

így ez 0.5itt van az 1.0

FOV

FOVlátószög

xJ = (xC / zC) / tan(FOV/2)

Ha FOV = 90 fokakkor ez 1

Page 25: Vektorok különbsége

Perspektív transzformáció

• A vetítés is homogén linearis transzformáció: ezt is lehet mátrixszorzással

• DE nem affin: utolsó oszlop nem [0 0 1]

• homogén koordinátákban kapjuk meg az eredményt, és h általában nem 1

• utána osztani kell h-val hogy rendes Descartes koodinátákat kapjunk

xJhomo / hJhomo = (xC / zC) / tan(FOV/2)

Page 26: Vektorok különbsége

Perspektív trafó mátrixxJhomo / hJhomo = (xC / zC) / tan(FOV/2)

[xJhomo ? hJhomo] = [xC zC 1]

1/tan(FOV/2) ? 0

0 ? 1

0 ? 0

xC / tan(FOV/2)

zC

ez a képernyő-pozíció szempontjából nem érdekes

Page 27: Vektorok különbsége

Mi legyen a Z?

• A takaráshoz kell

• Tartsa meg a kamera koordinátarendszer-beli sorrendet (legyen monoton a látható objektumok részén)

• Ha [0 A 0] lenne a mátrixban:

[xJhomo ? hJhomo] = [xC zC 1]

1/tan(FOV/2) 0 0

0 A 1

0 0 0zCA*zC = Amindig A: elveszne a mélység info

kell valamit ide is írni

Page 28: Vektorok különbsége

0 < ZJ <1 tartomány legyenfp < ZC < bp

1/(tg(fov/2)) 0 00 (fp+bp)/(bp-fp) 10 -2fp*bp/(bp-fp) 0

3D ben, asp a képernyő magassága a szélességhez képest(a függőleges és vízszintes FOV nem ugyanakkora )

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

Page 29: Vektorok különbsége

OpenGL ehhez képestide rakja az ablakot

Jz

Jx-1

kamera a –z felé néz

Page 30: Vektorok különbsége

Ezért a z sor -

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

de ezt összrakja az OpenGLgluPerspective()

Page 31: Vektorok különbsége

Miért jó, hogy minden számítás mátrix-szorzás?

(((r M1) M2) M3) = r (M1 M2 M3)

több lépést is lehet egyetlenmátrixszorzással,

ha a szorzatmátrixot használjuk

LINEÁRIS:háromszögből háromszög lesz

3Dben érintkező háromszögekből 2Dben illeszkedő hszek

nemlineárisnál a hszből valami más lesz, mi meg csak hszet tudunkhatékonyan rajzolni pixelekből

Page 32: Vektorok különbsége

Vágás

• Cohen-Sutherland: szakasz

• Sutherland-Hodgeman: sokszög (hsz is)

• A lényeg hogy egy szakasz metszéspontját megtaláljuk a vágósíkkal– szakasz paraméteres egyenlete (t)

– vágósík (2D ben egyenes) egyenlete– meg kell oldani az egyenletrenszert t-re

r(t) = t*r0 + (1-t)r1 ; 0 < t < 1

Page 33: Vektorok különbsége

Vágás példa 2Dben

r0 = [1 1]

r1 = [4 4]

vágjuk erre a fésíkra:x+y > 4

4 + 4 > 4, bent van

1 + 1 < 4, kint van

Page 34: Vektorok különbsége

Egyenletek• Szakasz egyenlete

• Ezzel az egyenessel kell a metszéspont

• Behelyettesítve

x(t) = t x0 + (1-t)x1

y(t) = t y0 + (1-t)y1

x + y = 4

t x0 + (1-t)x1 + t y0 + (1-t)y1 = 4t (x0 - x1 + y0 – y1) + x1 + y1 = 4t (1 - 4 + 1 - 4) + 4 + 4 = 4-6 t = -4t = 2/3; x(2/3) = 1 * 2/3 + 4 * 1/3 = 6/3 = 2

y(2/3) = 1 * 2/3 + 4 * 1/3 = 6/3 = 2

Page 35: Vektorok különbsége

Vágás példa 2Dben

r0 = [1 1]

r1 = [4 4]

vágjuk erre a fésíkra:x+y > 4

4 + 4 > 4, bent van

1 + 1 < 4, kint van

rc = [2 2]

Page 36: Vektorok különbsége

Háromszögek vágása

• Nem valami általános félsíkra szokott előfordulni, inkább pl. x > -1

• Sutherland-Hodgeman

• VAGY 4 eset– mind kint: nincs bent semmi– mind bent: az eredeti hsz marad– 2 kint: a két szakaszra vágunk, 3 csúcs

marad, 1 db hsz– 1 kint: a két szakaszra vágunk, 4 csúcs lesz,

2 db hsz

Page 37: Vektorok különbsége

Szakasz vágás 3D

• Ugyanez a menete

• De volt egy perspektív trafó– eredeti szakaszokat homogén szakaszokba

viszi, ami nem biztos hogy tényleg szakasz

Page 38: Vektorok különbsége

Átfordulási probléma

ablak a virtuális világra

1ide vetül

ide vetül

itt kellenelátszania

nem a két vetületipont között

Page 39: Vektorok különbsége

Ezért először vágunk, aztán vetítünk

ablak a virtuális világra

metszéspont

itt kellenelátszania

nem a két vetületipont között

ami ezenkívül van,nem kerül

a képernyőre,erre vágunk

ide vetül

Page 40: Vektorok különbsége

Szakasz vágás homogén koordinátákban

• Szakasz egyenlete ugyanaz

• Vágósík egyenlete lesz más

r(t) = t*r0 + (1-t)r1 ; 0 < t < 1

pl. x > -1 helyett xh > -h

Page 41: Vektorok különbsége

Példa

• Vágjuk a [2 3 4 1] – [5 6 -7 -1] szakaszt a z > 1 féltérre (homogénben: z > h)

• Szakasz egyenlete (csak a z meg a h fog kelleni a t meghatározásához)

• Vágósík egyenlete

x(t) = t x0 + (1-t)x1

y(t) = t y0 + (1-t)y1

z(t) = t z0 + (1-t)z1 = (4 + 7)t - 7 = 11t - 7h(t) = t h0 + (1-t)h1 = (1 - (-1))t - 1 = 2t - 1

z(t) = h(t); 11t - 7 = 2t - 1; t = 6/9 = 2/3

ez bent van ez kint van

Page 42: Vektorok különbsége

t vissza a szakasz egyenletébex(t) = 2/3 x0 + (1-2/3)x1 = 2/3 * 2 + 1/3 * 5 = 9/3 = 3y(t) = 2/3 y0 + (1-2/3)y1 = 2/3 * 3 + 1/3 * 6 = 12/3 = 4z(t) = 2/3 z0 + (1-2/3)z1 = 2/3 * 4 + 1/3 * (-7) = 1/3h(t) = 2/3 h0 + (1-2/3)h1 = 2/3 - 1/3 = 1/3

az eredmény [3 4 1/3 1/3]

jöhet a homogén osztás (minden / 1/3)

[9 12 1 1]

az eredményül kapott vágott szakasz:

[2 3 4 1] - [9 12 1 1] => [2 3 4] - [9 12 1]

a pont avágósíkonkell legyen

Page 43: Vektorok különbsége

Vizsgapélda

[1 3 1] Tp = [1 1 3] [1 -1 1]Tp = [1 -11 -1]Vágósíkokx <= h bent kintx >= -h bent benty <= h bent benty >= -h bent kint

x = 1 t + 1 (1 -t) = 1y = 1 t - 11 (1 - t) = 12t - 11h = 3 t - 1 (1 - t) = 4t - 1

x y h x y h

x=h; 1 = 4t - 1; t = ½

y=-h; 12t - 11 = -4t +1; t = ¾t = ¾ van közelebb a belső ponthoz¾ [1 1 3] + ¼ [1 -11 -1] = [1 -8/4 8/4] = [1 -2 2] -> [0.5 -1]

Page 44: Vektorok különbsége

Felületi pont árnyalása

• Kellhet hozzá (VILÁG koordinátában)– L fényirány (|L|=1), bejövő radiancia I(L)

(minden irányból ahonnan jön fény)– N normálvektor (|N|=1)– V szemirány, nézeti irány (|V|=1)

• BRDF(felület fényvisszaverő tulajdonsága)– diffúz kd

– spekuláris ks, n (exponens)

– ideális kr

OpenGLkamerakoordinátában csinálja

de az is jó

Page 45: Vektorok különbsége

Árnyalás jelölések

x: felületi pont

N normálvektor

L fényirány

R ideálisvisszaverődésiirány

V nézeti irány

Page 46: Vektorok különbsége

Absztrakt fényforrás típusok

• Irány (pl. [5 3 2] irányból [2 3 4] RGB radiancia)

– L adott, csak normalizálni kell– I(L) adott, mindenhol ugyanannyi, minden

más irányból 0

• Pontszerű (pl. [2 3 4] pozícióban [4 5 6] Watt RGB teljesítményű)

– L = (S-X)/|S-X|; S a fény pozíció X az árnyalt pont

– I(L) = / (4|S - X|2

teljesítmény

fény távolsága

4r2 : gömb felülete, ekkora felületen oszlik el a teljesítmény

Page 47: Vektorok különbsége

Égboltfény

• I(L) adott, általában konstans (minden bejövő irányra ugyananyi a radiancia)

• minden pontban érvényes

• diffúz és ideális tükör visszaverődés esetén könnyű, spekulárisnál integrálni kellene

Page 48: Vektorok különbsége

L, N, V-ből számítható

• cos– fény beesési szögének cosinusa– cos = L·N

• R – ideálisan visszavert fény iránya– L “tükörképe” a normálvektorra– R = 2N(L·N) – L (lásd skalárszorzat mire jó)

• cos – nézeti mennyire tér el az ideálistól– cos = R·V

Page 49: Vektorok különbsége

A alapegyenlet (rendering equ)

L(x,)=Le(x,)+L(h(x,-’,’) fr(’,x,) cos’d’

IV = I(L) cos fr( V,L) dL

A mi jelöléseinkkel a lényeg:

V irányú kimenőradiancia

összegezni mindenbejövő irányra

az onnan bejövő radiancia

egységnyi felületrebeeső

és V irányba visszavertrészét

beesésiszög

BRDF

Page 50: Vektorok különbsége

Irány és pontfényforrás esetén

• Csak egy irányból jön be fény, nem kell integrálni

IV = I(L) cos fr( V,L)

ezek mind adottak vagy számíthatóak

IV = Iin (N·L) BRDF• diffúz (BRDF = kd)

IV = Iin (N·L) kd

• ideális (ha R=V, BRDF = kr / cos )

IV = Iin kr• Phong (BRDF = ks cosn / cos )

IV = Iin (R·V)n ks

Page 51: Vektorok különbsége

Konstans égboltfény + diffúz

IV = I(L) cos fr( V,L) dL

IV = Iégbolt cos kd dL

nem függ az iránytól mertkonstans az égbolt

kd, mert diffúz

IV = Iégbolt kd cos dL

albedo

Page 52: Vektorok különbsége

Égboltfény + ideális

IV = Iégbolt(RV) kr

• Csak az az irány érdekes, aminek az ideális visszaverődési iránya a szemirány– RV = 2N(V·N) – V

• Az innen bejövő radiancia kr szerese megy a szemirányba

• Ehhez nem kell hogy konstans legyen az ég