.[ ČeskéHry.cz ].
OpenGL: Stmívačky mezi vrstvami

 
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
TeaTime



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

PříspěvekZaslal: 8. leden 2014, 12:06:25    Předmět: OpenGL: Stmívačky mezi vrstvami Odpovědět s citátem

Scénu teď vykresluji jaksi ve vrstvách - jedna vrstva je herní scéna, jedna vrstva je menu a tak podobně. Říkal jsem si, že by asi bylo dobré umožnit, aby se vrstva vykreslila jen částečně viditelně.

Samozřejmě jsem nejdříve zkusil do shaderu poslat parametr 'alpha' a vynásobil jsem tím alphy všech vykreslovaných fragmentů, ale brzy se ukázalo, že to není tak jednoduché. Problém je v tom, že když v té vrstvě mám dva fragmenty na sobě, tak se nejdříve vykreslí ten spodní a pak ten vrchí, takže jsou vidět oba. Já ale nechci, aby se skrz ten vrchní fragment byl vidět ten spodní ze stejné vrstvy, ale aby tam byl vidět až ten vrchní z další vrstvy.

Současně ale chci, že když má nějaký fragment z vrstvy částečnou viditelnost už sám o sobě (tedy způsobenou jinak než skrýváním celé vrstvy), tak aby zase ten fragment pod ním ze stejné vrstvy byl částečně vidět. Takže vhodné řazení vykreslování a depth buffer tady nepomůže.

Poradíte mi, jestli se to dá nějak relativně snadno udělat a jaké jsou možnosti?

Díky.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
micky



Založen: 28. 02. 2008
Příspěvky: 348
Bydliště: Plzeň, Praha

PříspěvekZaslal: 8. leden 2014, 12:56:49    Předmět: Odpovědět s citátem

Pokud to chceš takhle, tak mě napadá vyrenderovat každou vrstvu do textury (RGBA) a následně ty vrstvy míchat v režimu src_alpha, one_minus_src_alpha odzadu dopředu. Samozřejmě to nemusí být blending, ale rovnou můžu míchat více textur v shaderu "ručně".

Stmívačka by pak mohla být postupné ubrání alphy na nulu v první vrstvě, následně přidání alphy v druhé.
_________________
https://www.bluepulsar.cz/
https://twitter.com/11thDream_Game/
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
TeaTime



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

PříspěvekZaslal: 8. leden 2014, 13:06:11    Předmět: Odpovědět s citátem

Hmm, taky jsem si říkal, že takhle by to asi šlo, ale o renderování do textury nevím zhola nic. Výkonnostně se to asi nelyší od normálníh ovykreslování, že? A jak je to rámcově náročné předělat 'normální' vykreslování (glDraw) na vykreslování do textury?
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



Založen: 28. 07. 2009
Příspěvky: 879

PříspěvekZaslal: 8. leden 2014, 14:36:48    Předmět: Odpovědět s citátem

Kreslní do textury má minimální dopad na výkon, předělat to je otázka max. 2 hodin Smile a moc předěláváíní to není - akorát víceméně změníš render target, zbytek je tak jak byl (na glDraw apod se nešahá). Postup se dá najít všude na googlu.
Víceméně stejný princip používají deffered renderery, také kreslí do textur a pak ve finále se to různě smíchá a vyhodí na obrazovku.

Ad otázka.. proč se ti v jedné vrstvě překrývají fragmenty ? Nějak to moc nechápu.. když dělám GUI tímhle způsobem, tak překrývající se prvky nejsou asi úplně ideální Smile
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
TeaTime



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

PříspěvekZaslal: 8. leden 2014, 17:31:56    Předmět: Odpovědět s citátem

No kouknu na to vykreslování do textury a pak se o tom můžeme dál bavit.

Překrývání fragmentů: například jedna vrstva je celé GUI. U gui s tím problém nemám, na to používám CEGUI, které podporuje rendering do textury. Takže to bude v pohodě. Druhá celá vrstva je celá herní scéna. Teď tam mám panáčka, který je složen z několika meshů, které se částečně překrývají (například napojení nohou na tělo). Takže problém je v tomhle překryvu.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
TeaTime



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

PříspěvekZaslal: 9. leden 2014, 21:25:23    Předmět: Odpovědět s citátem

Kouknul jsem na to, a je to vpodstatě snadné. Ale musel bych tam pár věcí předělat - nic náročného, ale zatím to odložím a budu se soustředit na důležité věci.

Díky za rady.
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