zobrazovací projekce - univerzita karlovapepca/lectures/pdf/icg-22... · 2019. 11. 29. · [x, y]...

Post on 18-Nov-2020

3 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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

pepca@cgg.mff.cuni.czhttps://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

top related