L ÁTHATÓSÁG MEGHATÁROZÁSA tavaszi félév
C SAPATTAGOK Kalmár László (projekt vezető) Földi Antal Réperger Péter
F ELADAT • OpenGl-ben 3D-s objektumok látható felszíneinek meghatározása. • Algoritmusok: •Z-Buffer-algoritmus •Warnock-algoritmus •Festő algoritmus •BSP-fa •stb…
Z-B UFFER - ALGORITMUS Minden pixelre megkeresi azt a felületet, amelynél a pixelen keresztül látható pontban a Z koordináta minimális.
Z-BUFFER-ALGORITMUS() for minden p pixelre do PIXEL-ÍRÁS(p, háttér-szín) z-buffer[p] ← a legnagyobb ábrázolható érték for minden o háromszögre do for az o háromszög vetületének minden p pixelére do Z ← az o háromszög p-re vetül˝o pontjának Z koordinátája if Z < z-buffer[p] then PIXEL-ÍRÁS(p, az o színe ebben a pontban) z-buffer[p] ← Z
W ARNOCK - ALGORITMUS lgorithm A láthatóságot a pixelnél nagyobb egységekre vizsgálja A vetített poligonok és az ablak lehetséges viszonyai alapján:
•Ha metsző és tartalmazott objektumok vannak a vizsgált területen, akkor az ablakot négy egybevágó ablakra bontjuk fel, és újra kezdjük a vizsgálatot. •Pixel méretű ablakra különböző módszerek
WARNOCK-ALGORITMUS(X1, Y1, X2, Y2) if X1, X2 vagy Y1, Y2 ⊲ Az ablak a pixelnél nagyobb? then if legalább egy él esik az ablakba ⊲ Ablakfelezés és rekurzió. then WARNOCK-ALGORITMUS(X1, Y1, (X1 + X2)/2, (Y1 + Y2)/2) WARNOCK-ALGORITMUS(X1, (Y1 + Y2)/2, (X1 + X2)/2, Y2) WARNOCK-ALGORITMUS((X1 + X2)/2, Y1, X2, (Y1 + Y2)/2) WARNOCK-ALGORITMUS((X1 + X2)/2, (Y1 + Y2)/2, X2, Y2) return ⊲ Triviális eset: az (X1, Y1, X2, Y2) téglalap homogén. poligon ← az ((X1 + X2)/2, (Y1 + Y2)/2) pixelben látható poligon if nincs poligon then (X1, Y1, X2, Y2) téglalap kitöltése háttér színnel else (X1, Y1, X2, Y2) téglalap kitöltése a poligon színével
F ESTŐ ALGORITMUS „A festés során a későbbi ecsetvonások elfedik a korábbiakat” Működés: Poligonokat rendezzük P poligon csak akkor állhat a sorrendben egy Q poligon után, ha nem takarja azt. Kapott sorrendben visszafelé haladva egymás után raszterizáljuk a poligonokat
„P poligon nem takarja a Q poligont”, ha: A P poligon minden pontja hátrébb van (nagyobb Z koordinátájú) a Q poligon bármely pontjánál A P poligon vetületét befoglaló téglalapnak és a Q poligon vetületét befoglaló téglalapnak nincs közös része P valamennyi csúcsa (így minden pontja) messzebb van a szemtől, mint a Q síkja Q valamennyi csúcsa (így minden pontja) közelebb van a szemhez, mint a P síkja A P és Q vetületeinek nincs közös része
F EJLESZTŐKÖRNYEZET C# Visual Studio, Resharper,.NET 3.5 TAO Framework C# osztálykönyvtár OpengGl,FreeGlut,Cg,PhysFS, stb… TortoiseSVN
A LGORITMUSOK TESZTELÉSE Helyes működés teszt Helyesen jellennek-e meg az objektumok. Sebesség teszt Elfogadható-e a sebesség (fps). Összehasonlító teszt Az algoritmusok összehasonlítása egymással.
MI TÖRTÉNT EDDIG ? Algoritmusok kiválasztása Fejlesztőkörnyezet kiválasztása Szakirodalom tanulmányozása Teszt környezet írása (~40%) Z-buffer megvalósítása (~10%) 1. ellenőrző pont elérése
K ÖSZÖNÖM A FIGYELMET !