Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
tomkis
Založen: 06. 06. 2011 Příspěvky: 33
|
Zaslal: 23. červen 2013, 18:14:42 Předmět: Alphablending problém |
|
|
Ahoj, mám problém s blendingem alphy v OpenGL viz. screen. jedná se mi o černé překrývání okrajů.
.
Blend funkci mám nastavenou takto GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA.
Děkuji za rady. |
|
Návrat nahoru |
|
|
Vilem Otte
Založen: 18. 09. 2007 Příspěvky: 462 Bydliště: Znojmo - Sedlesovice, Kravi Hora
|
Zaslal: 23. červen 2013, 20:07:56 Předmět: |
|
|
Alpha blending ti správně poběží pouze pokud vykresluješ triangly back-to-front (tj. odzadu). Protínající se musíš rozříznout.
Druhá možnost je pohrát si s depth testem (obecně toto je způsobeno tím, že pixel se stínuje tehdy a jen tehdy, projde li depth testem (tj. depth funkce se vyhodnotí na true)), resp. depth maskou.
Třetí možnost je provést Order independent transparency pomocí např. deep-bufferů, linked-listů, apod. - nicméně to je o několik řádů složitější (ač pro velké scény mnohem rychlejší než řadit a řezat). _________________ Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration. |
|
Návrat nahoru |
|
|
tomkis
Založen: 06. 06. 2011 Příspěvky: 33
|
Zaslal: 23. červen 2013, 20:13:00 Předmět: |
|
|
Vilem Otte napsal: |
Alpha blending ti správně poběží pouze pokud vykresluješ triangly back-to-front (tj. odzadu). Protínající se musíš rozříznout.
Druhá možnost je pohrát si s depth testem (obecně toto je způsobeno tím, že pixel se stínuje tehdy a jen tehdy, projde li depth testem (tj. depth funkce se vyhodnotí na true)), resp. depth maskou.
Třetí možnost je provést Order independent transparency pomocí např. deep-bufferů, linked-listů, apod. - nicméně to je o několik řádů složitější (ač pro velké scény mnohem rychlejší než řadit a řezat). |
Díky, znamená to tehdy, že záleží i na pořadí uspořádání trianglů ve VBO? Mám totiž pouze jeden VBO pro celý mesh. |
|
Návrat nahoru |
|
|
Ladis
Založen: 18. 09. 2007 Příspěvky: 1536 Bydliště: u Prahy
|
Zaslal: 23. červen 2013, 20:21:18 Předmět: |
|
|
Taky je možnost použít blending, kde je to jedno, např. sčítací průhlednost. Ale pak to bude samozřejmě vypadat jinak. _________________ Award-winning game developer |
|
Návrat nahoru |
|
|
tomkis
Založen: 06. 06. 2011 Příspěvky: 33
|
Zaslal: 23. červen 2013, 20:34:00 Předmět: |
|
|
našel jsem poměrně jednoduché řešení, které je pro mé účely dostačující. Jelikož je problém v depth testu průhledných pixelů (které mají dejme tomu 95+% alphu), stačí v frag. shaderu tyto pixely discardnout - kolem okrajů obrazce se sice udělají menší "výřezy", ale v mém případě nejsou až tak drastické. |
|
Návrat nahoru |
|
|
nou
Založen: 28. 07. 2007 Příspěvky: 1047
|
Zaslal: 23. červen 2013, 20:57:46 Předmět: |
|
|
to si implementoval alpha testing. vyskusaj vypnut zapis do depth bufferu ked vykreslujes prihladne objekty pomocou glDepthMask() _________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
|
tomkis
Založen: 06. 06. 2011 Příspěvky: 33
|
Zaslal: 24. červen 2013, 09:17:50 Předmět: |
|
|
nou napsal: |
to si implementoval alpha testing. vyskusaj vypnut zapis do depth bufferu ked vykreslujes prihladne objekty pomocou glDepthMask() |
Toto jsem zkoušel, ale není to uplně šťastné, protože když zakážu zápis do Zbufferu, tak se mi můj mesh vykreslí špatně - ignoruje se hloubka quadu. |
|
Návrat nahoru |
|
|
quas4
Založen: 18. 10. 2007 Příspěvky: 199
|
Zaslal: 24. červen 2013, 13:18:09 Předmět: |
|
|
tomkis napsal: |
nou napsal: |
to si implementoval alpha testing. vyskusaj vypnut zapis do depth bufferu ked vykreslujes prihladne objekty pomocou glDepthMask() |
Toto jsem zkoušel, ale není to uplně šťastné, protože když zakážu zápis do Zbufferu, tak se mi můj mesh vykreslí špatně - ignoruje se hloubka quadu. |
mesh s temito "particle" quady? Z toho jednoho obrazku neni uplne jasne o co se snazis. Pripadne je v texture i alpha kanal nebo ne?
Kreslit by jsi mel v nasledujicim poradi:
1. vykreslit vsechny nepruhledne objekty/meshe s depth-write=on, depth-test=on, blending=off
2. vykreslit vsechny pruhledne objekty/meshe serazene od nejvzdalenejsiho po nejblizsi ke kamere s depth-write=off, depth-test=on, blending=on
to je uplny zaklad, pak to lze dal vylepsovat. Napriklad pouzit premultipled alpha pro kresleni vsech castic bez ohledu zda maji additivni nebo mult. blending apod. Ale ty 2 body stale plati. |
|
Návrat nahoru |
|
|
|