.[ ČeskéHry.cz ].
Alphablending problém

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
tomkis



Založen: 06. 06. 2011
Příspěvky: 33

PříspěvekZaslal: 23. červen 2013, 18:14:42    Předmět: Alphablending problém Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Vilem Otte



Založen: 18. 09. 2007
Příspěvky: 462
Bydliště: Znojmo - Sedlesovice, Kravi Hora

PříspěvekZaslal: 23. červen 2013, 20:07:56    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
tomkis



Založen: 06. 06. 2011
Příspěvky: 33

PříspěvekZaslal: 23. červen 2013, 20:13:00    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Ladis



Založen: 18. 09. 2007
Příspěvky: 1536
Bydliště: u Prahy

PříspěvekZaslal: 23. červen 2013, 20:21:18    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
tomkis



Založen: 06. 06. 2011
Příspěvky: 33

PříspěvekZaslal: 23. červen 2013, 20:34:00    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



Založen: 28. 07. 2007
Příspěvky: 1047

PříspěvekZaslal: 23. červen 2013, 20:57:46    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
tomkis



Založen: 06. 06. 2011
Příspěvky: 33

PříspěvekZaslal: 24. červen 2013, 09:17:50    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
quas4



Založen: 18. 10. 2007
Příspěvky: 199

PříspěvekZaslal: 24. červen 2013, 13:18:09    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna