Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
TeaTime
Založen: 17. 06. 2011 Příspěvky: 264
|
Zaslal: 8. leden 2014, 12:06:25 Předmět: OpenGL: Stmívačky mezi vrstvami |
|
|
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 |
|
 |
micky

Založen: 28. 02. 2008 Příspěvky: 348 Bydliště: Plzeň, Praha
|
Zaslal: 8. leden 2014, 12:56:49 Předmět: |
|
|
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 |
|
 |
TeaTime
Založen: 17. 06. 2011 Příspěvky: 264
|
Zaslal: 8. leden 2014, 13:06:11 Předmět: |
|
|
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 |
|
 |
perry

Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 8. leden 2014, 14:36:48 Předmět: |
|
|
Kreslní do textury má minimální dopad na výkon, předělat to je otázka max. 2 hodin 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í  _________________ Perry.cz |
|
Návrat nahoru |
|
 |
TeaTime
Založen: 17. 06. 2011 Příspěvky: 264
|
Zaslal: 8. leden 2014, 17:31:56 Předmět: |
|
|
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 |
|
 |
TeaTime
Založen: 17. 06. 2011 Příspěvky: 264
|
Zaslal: 9. leden 2014, 21:25:23 Předmět: |
|
|
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 |
|
 |
|