Inkrementális 3D képszintézis

Download Report

Transcript Inkrementális 3D képszintézis

Inkrementális 3D
képszintézis
Szirmay-Kalos László
Inkrementális képszintézis
Árnyalás, láthatóság nehéz, különösen általános
helyzetű objektumokra
 koherencia: oldjuk meg nagyobb egységekre
 feleslegesen ne számoljunk: vágás
 transzformációk: minden feladathoz megfelelő
koordinátarendszert

– vágni, transzformálni nem lehet akármit: tesszelláció
3D inkrementális képszintézis
tesszeláció
Lokális k.r.
vágás
TM
TV
Világ k.r.
takarás
Képernyő k.r.
vetítés
Tesszelláció
felületi pontok kijelölése: rn,m = r(un,vm)
 felületi pontok összekötése: háromszögháló,
huzalváz

Modellezési transzformáció
z
1. skálázás: sx, sy, sz
2. orientáció: , , 
3. pozíció:
px, py, pz
y
x
1
sx
TM=
R
sy
sz
1
1
1
1
px, py, pz, 1
(R21,R22,R23)
z
(R31,R32,R33)
x
TM =
Orientáció
y
R
=
1
(R11,R12,R13)
cos
cos sin
-sin cos
sin
1
Csavaró:
Roll
Orientáció = ortogonális mátrix
Orientácó: 3 szabadságfok
Orientáció = három szög
1
-sin
1
1
cos
Billentő:
Pitch
1
cos sin
-sin cos
Forduló:
Yaw
1
Kvaterniók






Komplex számok általánosítása
q = [s,x,y,z] = [s,w] = s+xi+yj+zk
q1+q2 = [s1+s2, x1+x2, y1+y2, z1+z2]
aq = [as,ax,ay,az]
|q| =  s2+x2+y2+z2
Szorzás:
– i2 = j2 = k2 = ijk = -1, ij=k, ji=-k, jk=i, kj=-i, ki=j, ik=-j
Szorzás asszociatív, de nem kommutatív
– Van egységelem: [1,0,0,0]
– Van inverz: q-1 = [s,-w]/|q|2 , q-1q = qq-1=[1,0,0,0]
– (q1q2)-1=q2-1q1-1
Kvaternió = forgatás az origón
átmenő w tengely körül


q = [s,x,y,z] = [s,w]
q[0,u]q-1 = [0,v]
– v az u elforgatottja a w körül  szöggel
– cos  = 1 – 2(x2+y2+z2)/(s2+x2+y2+z2)
– q abszolút értéke nem számít

Elforgatás legyen egység hosszú kvaternió
– [cos/2, w sin/2], |w| = 1

Elforgatások fűzése
– q1(q2 [0,u]q2-1 ) q1-1 = (q1q2 )[0,u](q1q2 )-1

Egység hosszú kvaternió = orientáció
Origón átmenő w tengely körül 
szöggel forgató mátrix: R

w egységvektor, q = [cos/2, w sin/2]

(0, R11,R12,R13) = q[0,1,0,0]q-1
(0, R21,R22,R23) = q[0,0,1,0]q-1
(0, R31,R32,R33) = q[0,0,0,1]q-1


Rodriquez formula
 glRotate(alpha, wx, wy, wz);
fokban!!!

Transzformációk
 Modellezési
transzformáció:
[rlokális,1] TM = [rvilág,1]
 Nézeti
transzformáció:
[rvilág,1] Tv = [rképernyőh, h]
 Összetett
transzformáció:
[rlokális,1] TMTv = [rlokális,1] TC = [rképernyőh, h]
Nézeti transzformáció:
Kamera modell
vup
fp
eye
fov
aspect
vrp
(lookat)
z
y
x
bp
Nézeti transzformáció lépései
Bal!!!
y
eye
1
z
z
2. Kamera
y
4. Normalizált képernyő
90 látószög
x
1. Világ
3. Normalizált
kamera
1
5. Képernyő
vup
eye
w
z
Kamera transzformáció
gluLookAt(eye,lookat,vup)
v
lookat
u
w = (eye-lookat)/|eye-lookat|
u = (vup x w)/ |w x vup|
v=wxu
w
y
1
0
0 0
v
0
1
0 0
x
0
0
1 0
u
[x’,y’,z’,1] = [x,y,z,1] -eyex -eyey -eyez 1
ux uy uz
vx vy vz
wx wy wz
0 0 0
ux
uy
uz
0
vx
vy
vz
0
0
0
0
1
-1
wx 0
wy 0
wz 0
0 1
Normalizálás
bp*tg(fov/2)
fp
90 látószög
bp
Tnorm
1/(tg(fov/2)·aspect) 0
0
1/tg(fov/2)
0
0
0
0
0
0
1
0
0
0
0
1
Perspektív transzformáció:
gluPerspective(fov, aspect, fp, bp)
[-mx*z, -my*z, z]
-fp
[mx, my, -1]
[mx, my, 1]
1
-bp
[mx*fp, my*fp, -fp]  [mx, my, -1 ]
[mx*bp, my*bp, -bp]  [mx, my, 1 ]
[mx*fp, my*fp, -fp, 1]  [mx, my, -1, 1]a
[mx*bp, my*bp, -bp, 1]  [mx, my, 1, 1] b
// mi: a = fp
// ekkor: b = bp
[mx*fp, my*fp, -fp, 1]  [mx*fp, my*fp, -fp, fp]
Perspektív transzformáció
bp
Tpersp
t11
t12
t13
-fp*t33+t43 = -fp t21
t22
t23
-fp*t34+t44 = fp t31
t32
t33
t41
t42
t43
[mx*fp,my*fp,-fp,1] * [mx*fp, my*fp, -fp,
[mx*bp,my*bp,-bp,1]*[mx*bp, my*bp, bp,
90 látószög
fp
1, 1
-bp*t33+t43 = bp 1
-bp*t34+t44 = bp 0
0
0
t14
t24
t34
t44
fp]
bp]
0
0
0
1
0
0
0 -(fp+bp)/(bp-fp) -1
0 -2fp*bp/(bp-fp) 0
y
z
Perspektív transzformáció:
gluPerspective(fov,asp,fp,bp)
1/(tg(fov/2)·asp) 0
0
0
0
1/tg(fov/2)
0
0
0
0
-(fp+bp)/(bp-fp) -1
0
0
-2fp*bp/(bp-fp) 0
1
[Xh,Yh,Zh,h] = [xc,yc,zc,1] Tpersp
[X,Y,Z,1] = [Xh/h, Yh/h, Zh/h,1]
Nézeti csővezeték
Modell:
x,y,z
TM
TVIEW
TPERSP
Vágás
Rasztertár:
X, Y
Vetítés
Takarás
Nézet
transzf
Huzalváz képszintézis
esetén kimaradhat
Homogén
osztás
Mélységi vágás a homogén
osztás előtt kell
[1,1,2]
[1,1,-2]
1
bp=3
fp=1
1
0
0
0
0
1
0
0
0
0
-2
-3
0
0
-1
0
[1, 1,-2, 1] * [ 1
[1, 1, 2, 1] * [ 1
1
1
1
-7
2]
-2]
-(fp+bp)/(bp-fp)
-2fp*bp/(bp-fp)
Homogén osztás:
[X,Y,Z,1] = [Xh/h, Yh/h, Zh/h,1]
[1/2 1/2 1/2 1]
[-1/2 -1/2 7/2 1]
Vágás homogén koordinátákban
Cél:
-1 < X = Xh/h < 1
-1 < Y = Yh/h < 1
-1 < Z = Zh/h < 1
Vegyük hozzá: h > 0 (h = -z a kamera koordinátarendszerben)
h = Xh
-h < Xh < h
-h < Yh < h
-h < Zh < h
Kívül
[3, 0, 0, 2 ]
h = 2 < Xh = 3
Belül
[2, 0, 0, 3 ]
h = 3 > Xh = 2
Szakasz/poligon vágás
-h < Xh < h
-h < Yh < h
-h < Zh < h
h = Xh
[Xh1,Yh1,Zh1,h1]
h = h1·(1-t)+h2 ·t =
= Xh = Xh1·(1-t) + Xh2·t
t=…
Xh = Xh1 · (1-t) + Xh2 · t
1 · (1-t) + Y 2 · t
Y
=
Y
h
h
h
[Xh2,Yh2,Zh2,h2] Z = Z 1 · (1-t) + Z 2 · t
h
h
h
h = h1 · (1-t) + h2 · t
Huzalváz képszintézis
(Xh,Yh,Zh,h)
Modell:
x,y,z
TM
TV
Vágás
Homogén
osztás
TC
Szín
(X,Y,Z)
Rasztertár:
X, Y
2D szakasz
rajzolás
Nézet transzf
Vetítés
(X,Y)
Tömör képszintézés
Képernyő koordinátarendszerben,
a szem a z irányba néz
 Objektumtér algoritmusok: láthatóság
számítás nem függ a felbontástól
 Képtér algoritmusok: mi látszik egy
pixelben

r3
n = (r3 - r1) (r2 - r1)
r2
Hátsólab eldobás:
back-face culling
r1
nz < 0
nz > 0
Lapok a nézeti irányban:
• Kívülről: lap, objektum: első lap
• Belülről: objektum, lap: hátsó lap
Feltételezés:
Ha kívülről, akkor csúcsok óramutóval megegyező körüljárásúak
Z-buffer algoritmus
2.
1.
3.

628
1325
1325
628
3325
Z-koordináta:
lineáris interpoláció
Z
(X2,Y2,Z2)
Z(X,Y) = aX + bY + c
Y
(X1,Y1,Z1)
(X3,Y3,Z3)
Z(X,Y)
X
Z(X+1,Y) = Z(X,Y) + a
Z-interpolációs hardver
X
Z(X,Y)
X számláló
Z regiszter
CLK
S
a
Árnyalás


Koherencia: ne pixelenként kelljen
az árnyalási egyenletet megoldani
Háromszögenként:
– 1-szer sem: saját színnel árnyalás
– 1-szer: konstans árnyalás
– csúcspontonként 1-szer,
belül lineáris interpoláció: Gouraud árnyalás
– pixelenként,
a normál (view, light, reflection) vektort interpoláljuk:
Phong árnyalás
Árnyalás saját színnel
Konstans árnyalás
Gouraud árnyalás
R,G,B
(X2,Y2,R2)
R(X,Y) = aX + bY + c
Y
(X1,Y1,R1)
(X3,Y3,R3)
R(X,Y)
X
R(X+1,Y) = R(X,Y) + a
Gouraud árnyalás
spekuláris
diffúz
ambiens
N
L
Phong árnyalás
V
Y
N(X,Y)
X
N(X,Y) = A X + BY + C
L(X,Y) = ...
V(X,Y) = ...
Illumináció:
világkoordinátarendszerben
Nézeti transzformáció
Pixelenként:
• vektorok lin. interpolációja
• vektorok normalizálása
• illuminációs képlet
Phong árnyalás
Gouraud, Phong
Gouraud
Phong
Gouraud
Phong