zobrazovací projekce - univerzita karlovapepca/lectures/pdf/icg-22... · 2019. 11. 29. · [x, y]...
TRANSCRIPT
Projection 2019 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 1 / 28
Zobrazovací projekce
© 1995-2019 Josef Pelikán CGG MFF UK Praha
[email protected]://cgg.mff.cuni.cz/~pepca/
Projection 2019 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 2 / 28
Základní pojmy
průmětna
promítacípaprsky
průmětna
středprojekce
Projection 2019 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 3 / 28
Klasifikace lineárních projekcí
Rovnoběžné projekce– promítací paprsky jsou navzájem rovnoběžné
Kolmé projekce– promítací paprsky jsou kolmé na průmětnu– Mongeova projekce, půdorys, nárys, bokorys– axonometrie (obecná kolmá projekce)
Kosoúhlé projekce– kabinetní projekce (zkrácení měřítka osy z na 1/2)– kavalírní projekce (stejné měřítko na všech osách)
Projection 2019 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 4 / 28
Mongeova projekce
nárys
půdorys
bokoryszleva
x y
y
z z
Projection 2019 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 5 / 28
Axonometrie – isometrie
xy
z
průmětna
1
1
1
a a
a
Projection 2019 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 6 / 28
Axonometrie – dimetrie
xy
z
průmětna
1
11
a a
b
Projection 2019 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 7 / 28
Axonometrie – trimetrie
xy
z
průmětna
1
11
ba
c
Projection 2019 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 8 / 28
Kabinetní projekce
průmětna = xy
x
z
y
1
11
11/2
30°
x
z
y
1
11
11/2
45°
Projection 2019 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 9 / 28
Kavalírní projekce
průmětna = xy
x
z
y
1
11
11
30°
x
z
y
1
1
1
1
1
45°
Projection 2019 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 10 / 28
Klasifikace lineárních projekcí
Středové projekce („perspective projections“)– promítací paprsky tvoří svazek procházející jedním bodem,
středem projekce– nezachovává se rovnoběžnost (úběžníky)
Jednobodová perspektiva– průmětna je rovnoběžná se dvěma souřadnými osami– rovnoběžky se třetí osou se protínají v jednom hlavním úběžníku
Projection 2019 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 11 / 28
Jednobodová perspektiva
z
průmětna || xz
x
y
Projection 2019 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 12 / 28
Další středové projekce
Dvoubodová perspektiva– průmětna je rovnoběžná s jednou souřadnou osou– rovnoběžky s ostatními osami se protínají ve dvou hlavních
úběžnících
Tříbodová perspektiva– průmětna má zcela obecnou polohu– rovnoběžky se souřadnými osami se protínají ve třech hlavních
úběžnících
Projection 2019 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 13 / 28
Dvoubodová perspektiva
zprůmětna || z
xy
Projection 2019 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 14 / 28
Tříbodová perspektiva
zprůmětna protínávšechny osy
xy
Projection 2019 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 15 / 28
Implementace kolmé projekce
[x, y] budou souřadnice bodu v průmětu, z jeho hloubka (vzdálenost od pozorovatele)
Základní pohledy (půdorys, nárys, bokorys)– pouze permutace složek x, y a z (s příp. změnou znaménka)
Obecná kolmá projekce (axonometrie)– směr pohledu (normálový vektor průmětny): N– svislý vektor: u– převedení do základního pohledu: Cs(S, u×N, u, N)
Projection 2019 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 16 / 28
Obecná kolmá projekce
x
y
z
Nu×N
u
Cs(S, u×N, u, N)
x
y
zN
u×N
u
S
Projection 2019 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 17 / 28
Implementace kosoúhlé projekce
[1 0 0 00 1 0 0
K⋅cosα K⋅sin α 1 00 0 0 1
]
průmětna: xykoeficient zkrácení: Kúhel průmětu osy z:
x
z
y
K
Projection 2019 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 18 / 28
Implementace středové projekce
Obecná středová projekce– střed projekce: S– směr pohledu (normálový vektor průmětny): N– vzdálenost průmětny od středu projekce: d– svislý vektor: u
Promítací transformace– převedení do základní polohy (střed projekce do počátku,
směr pohledu do osy z): Cs(S, u×N, u, N)– perspektivní projekce: např. [ x · d/z, y · d/z, z ]
Projection 2019 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 19 / 28
Převedení do základní polohy
x
y
z
N
u×N
u
S
d
x
y
zN
u×Nu
Cs(S, u×N, u, N)
Projection 2019 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 20 / 28
Perspektivní transformace
[1 0 0 00 1 0 0
0 0 1 1d
0 0 0 0]x, y
z
d
průmětna
Nezachováválinearitu útvarů!
Projection 2019 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 21 / 28
Perspektivní projekce na GPU
Vzdálený bod f může být i v nekonečnu
[2nr−l
0 0 0
0 2nt−b
0 0
−rlr−l
−tbt−b
f nf −n
1
0 0 −2fnf −n
0 ]
n
f
[-]z
xy
[2nr−l
0 0 0
02nt−b
0 0
−r+lr−l
−t+bt−b
1 1
0 0 −2n 0]
Projection 2019 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 22 / 28
Transformace lineárních útvarů
Perspektivní transformace úsečky Per– je zřejmé, že neplatí rovnost
Per(A + t · [B - A]) = Per(A) + t · [Per(B) - Per(A)]
Použití diferenčních algoritmů (DDA) při výpočtu viditelnosti– mějme bod C(u) na úsečce Per(A)Per(B)
C(u)x,y = Per(A)x,y + u · [Per(B)x,y - Per(A)x,y]
– potřebujeme, aby i pro hloubku z platilo
C(u)z = Per(A)z + u · [Per(B)z - Per(A)z]
Projection 2019 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 23 / 28
Interpolation in the screen space
Concerns clip-space and next spaces– clip space: [x, y, z, w]
– NDS: [x/w, y/w, z/w, w] (“w” could be preserved)
– window space (fragments): [xi, yi, zi, w]
Projective perspective transformation maps depth z to NDS non-linearly!– nonuniform accuracy of z-buffer (distant parts could be less
accurate: minimization of f/n ratio!)+ interpolation of depth 1/z can be done in the screen space linearly
„W-buffer“ instead of „z-buffer“ (not frequently used)
Projection 2019 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 24 / 28
Perspective-correct interpolation
Linear interpolation + division (hyperbolic interpolation)– reciprocal depth “1/z” can be interpolated linearly– for additional attributes (texture coordinates) perspective-correct
adjustment must be used– quantities “1/z”, “u/z”, “v/z”… are linearly interpolated, [u, v] is
then computed by division
[x1, y1, 1/z1, u1/z1, v1/z1]
[x3, y3, 1/z3, u3/z3, v3/z3][x2, y2, 1/z2, u2/z2, v2/z2]
1. linear
2. linear
3. pixel (fragment) z = (1/z)-1
u = (u/z) · z v = (v/z) · z
Projection 2019 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 25 / 28
Interpolation example I
Affine Correct
Projection 2019 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 26 / 28
Interpolation example II
Affine
Correct
Projection 2019 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 27 / 28
4D ořezávání
x, y
z
-k k
x,y = -k x,y = k
z = 0
zorný kvádr
Hraniční nadrovinyx = -kw, x = kw, y = -kw, y = kw, z = 0
pro w > 0: -kw < x < kw, -kw < y < kw, 0 < z
Projection 2019 © Josef Pelikán, https://cgg.mff.cuni.cz/~pepca 28 / 28
Literatura
J. Foley, A. van Dam, S. Feiner, J. Hughes: Computer Graphics, Principles and Practice, 229-283
Jiří Žára a kol.: Počítačová grafika, principy a algoritmy, 277-291
Kok-Lim Low: Perspective-Correct Interpolation (report, proof), University of North Carolina at Chapel Hill, 2002