Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Jarda9 15. 12. 2013, 13:34:37

Název: OpenGL - třídění průhledných ploch
Přispěvatel: Jarda9 15. 12. 2013, 13:34:37
Ahoj,
je potřeba třídit před vykreslením průhledné plochy?

Možná mám jen něco špatně nastavené, ale v tuto chvíli se mi scéna správně vykreslí jen pokud kreslím průhledné plochy od nejvzdálenější k nejbližší. Pokud scénu otočím, tak se scéna nevykreslí dobře
Název: Re:OpenGL - třídění průhledných ploch
Přispěvatel: lamka 15. 12. 2013, 13:57:00
imho je to OK... ak rendrujes najprv plochu vpredu a potom rendrujes plochu za nou, tak ta druha neprejde depth testom, takze sa nevyrendruje... cize bud vypnut depth test (ak to nevadi scene) alebo vzdy zoradit...
Název: Re:OpenGL - třídění průhledných ploch
Přispěvatel: Jarda9 15. 12. 2013, 14:01:15
A jak rozhodnout, která plocha je blíž a která dál. Plochy můžou být libovolně natočené. Navzájem se ale nekříží.
Název: Re:OpenGL - třídění průhledných ploch
Přispěvatel: lamka 15. 12. 2013, 14:36:24
postni obrazok ako to vyzera - pre predstavu...

Co sa tyka zoradenia - no mozes vytvorit nejaky zasobnik, do ktoreho v kazdom cykle nahadzes plochy - tie tam nahadzes podla vzdialenosti kamery od plochy - dajme tomu stredu plochy od pozicie kamery a to od najvacsej po najmensiu... a nasledne nechas rendrovat podla poradia v zasobniku...

Ale pokial plochy nemenia navzajom svoju polohu (voci inym plocham), tak imho je zbytocne riesit nieco take... ja by som to riesil pevnym poradim a rendrovanim celej skupiny ploch 2x... najprv v poradi od najvzdialenejsej ku najblizsej s orezenou zadnou castou polygonu(cez culling), a potom druhykrat v poradi od najblizsej po najvzdialenejsiu s orezanou prednou castou... a v beziacej apikacii potom mozes otacat podla lubovole a vidis iba jednu z tych dvoch skupin, pretoze sa ta odvratena oreze... :D
Název: Re:OpenGL - třídění průhledných ploch
Přispěvatel: Ivorne 15. 12. 2013, 15:05:57
Vykreslovat dvakrát je nesmysl. Když vykresluješ (polo)průhledné objekty, tak správně to bude jen když to vykreslíš od nejvzdálenějšího po nejbližší. Dělá se to třeba tak, že vykreslíš nejdříve neprůhledné objekty (ideálně od nejbližšího po nejvzdálenější) se zápisem do depth bufferu a pak vykreslíš průhlední objekty od nejvzdálenějšího po nejbližší (není třeba zapisovat do depth bufferu).

Pokud máš v nějakém trojúhelníku jen zcela viditelné a zcela průhledné fragmenty (žádné poloprůhledné), tak se trojúhelník považuje za neprůhledný a průhledné fragmenty jsou vyřazeny alpha testem, takže nedojde k zápisu do depth bufferu.

Problém je v tom, když některé trojúhelníky nejde jednoznačně seřadit podle hloubky. To už je výpočetně náročnější a tam nemám zkušenost s tím, jak to řešit. Nejjednodužším řešením je v takovém případě rozdělit trojúhelníky na menší tak, aby se tam tento problém nevyskytoval. Ale to taky často nejde moc dobře.
Název: Re:OpenGL - třídění průhledných ploch
Přispěvatel: Jarda9 15. 12. 2013, 15:23:40
Porovnávat středy jsem zkoušel, ale jsou případy, kdy to vypadalo taky špatně

Objekty mám rozdělené na průhledné a neprůhledné. Kreslím je samostatně, nejdříve neprůhledné a až potom průhledné. Vše vypadá bezvadně, pokud ty průhledné kreslím od nejvzdálenějšího k nejbližšímu. To je ale ten kámen úrazu. Setřídit ty průhledné.

Neexistuje nějaká fce, která by mě dokázala určit, která ze dvou ploch je v popředí a která na pozadí? Mohu čtyřúhelníky rozdělit jednoduše na trojúhelníky, pokud by byla nějaká fce jen pro trojúhelníky


(http://www.uppic.com/do.php?img=105610)
Název: Re:OpenGL - třídění průhledných ploch
Přispěvatel: anonym 15. 12. 2013, 17:30:12
pokud neresis polopruhledne ale jen plne pruhledne (tedy napriklad sprity s pruhlednou texturou) tak ti tam dela problemy depth buffer

potrebujes bud vypnout depth test, nebo pouzivat GL_ALPHA_TEST pro orezavani (nebo mozna neco modernejsiho, uz je to nejaka doba co sem to pouzil)

pokud resis polopruhledne tak je potreba spravne seradit, ale to je obecne neresitelna uloha (pokud se ti dva trojuhelniky protinaji tak neexistuje jejich korektni poradi)
Název: Re:OpenGL - třídění průhledných ploch
Přispěvatel: Ivorne 15. 12. 2013, 18:09:12
No každopádně bych takovýhle algoritmus programoval jen pro trojúhelníky a celkově pracoval jenom s trojúhelníky. Nemá cenu si komplikovat už tak složitou analytickou geometrii polygony. Jak to fakt udělat nevím. Zeptej se na http://ceske-hry.cz. Tady jsou dole nějaké zajímavé odkazy na alternativní řešení (order-independent): http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-10-transparency/
Název: Re:OpenGL - třídění průhledných ploch
Přispěvatel: Jarda9 15. 12. 2013, 20:11:41
diky, kouknu na ty odkazy. Ja mam ale docela omezene zadani. Neni potreba to resit absolutne obecne. Plochy se treba vubec neprotinaji a pujde jen o ctyruhelniky