.[ ČeskéHry.cz ].
Návrhový vzor pro třídu hlavního okna hry
Jdi na stránku Předchozí  1, 2
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
]semo[



Založen: 29. 07. 2007
Příspěvky: 1525
Bydliště: Telč

PříspěvekZaslal: 21. listopad 2013, 10:58:24    Předmět: Odpovědět s citátem

Ten stack je sám o sobě dobrý :-). Jen by ty screeny měly mít jen Update() a HandleInput (plus Init, Activated, a pod. ).
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Ladis



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

PříspěvekZaslal: 21. listopad 2013, 13:18:12    Předmět: Odpovědět s citátem

Renderování může být i odloženě, že screen jen pošle příkazy do rendereru, jehož funkce pro skutečný render se zavolá naposled. Takhle si ty screeny můžou zaregistrovat post-process efekty. Není to nic nového, kreslí takhle Intel GPU a kdysi hodně dávno grafika Kyro.
_________________
Award-winning game developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



Založen: 29. 07. 2007
Příspěvky: 1525
Bydliště: Telč

PříspěvekZaslal: 21. listopad 2013, 13:32:51    Předmět: Odpovědět s citátem

To je sice pravda, ale to je přesně to, čemu říkám "nesystémová oklika". A když budu zabíhat do detailů, tak vykreslení může být hodně složité, může se skládat z vícero passů, různých render targetů, pomocných funkcí pro osvětlení, atd. A i kdyby ty funkce pro "odložený rendering" měly být zjednodušené, tak už udávají pořadí kreslení, o kterým ale musí rozhodovat renderer. Když z toho konceptu vyhážu všechno, co by mohlo způsobovat problémy, tak zbývá něco jako Model1.enabled = true; Na to ale neni potřeba metoda Render().

Na druhou stranu netvrdím, že musím mít za každou cenu pravdu :-). Píšu jen zkušenost s projektama, na kterých jsem dělal. A navíc mám dnes náladu na diskutování :-).
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



Založen: 29. 07. 2007
Příspěvky: 1525
Bydliště: Telč

PříspěvekZaslal: 21. listopad 2013, 13:46:41    Předmět: Odpovědět s citátem

Jo a ještě jedna věc k tématu návrhový vzor pro třídu okna:

TeaTime: neměj třídu "Window" a "WindowModule", jak si psal, ale "Game" a "GameModule". Window by mělo obsahovat jen platformně závislý okení srač..y.
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



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

PříspěvekZaslal: 21. listopad 2013, 13:47:06    Předmět: Odpovědět s citátem

To odlozene renderovani jsem pouzival v kombinaci s deferred renderingem. Vsechno se vykreslili a pak uz se jen resili post-proces efekty. Fungovalo to skvele, bohuzel momentalne na mobilu tohle nemam a mam klasicky render a tim jak psal semo si uvedomuji, ze je napsany blbe. Mozna pokud nekdo muze doporucit nejakou literaturu / blog ? Smile

EDIT: Asi to bude vtipné.. ale znáte to.. teď jsem něco upravoval ve hře a zamotal jsem se v rendereru, když jsem dodal částice Laughing Budu to muset přepsat na jeden "globální" renderer, co drží všechno
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
]semo[



Založen: 29. 07. 2007
Příspěvky: 1525
Bydliště: Telč

PříspěvekZaslal: 22. listopad 2013, 10:15:30    Předmět: Odpovědět s citátem

Literaturu nebo blog bohužel spíš nedoporučím, protože je neznám. Vím, že existuje nějaká zázračná kniha o architektuře 3D enginů, po jejímž přečtení začal autor enginu Ogre psát engine Ogre :-).

Jinak myslím, že pokud to je potřeba, tak neni ostuda přepisovat engine. Ostuda je nepřepsat to :-). Můžeš tomu říkat "refaktorizace" ;-). No...já přepisuju pořád. Naposledy to bylo asi před týdnem hlavní okno editoru, kterej dělám.
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Poky



Založen: 29. 06. 2009
Příspěvky: 184
Bydliště: Písek / Plzeň

PříspěvekZaslal: 22. listopad 2013, 19:04:41    Předmět: Odpovědět s citátem

citace:
Jinak myslím, že pokud to je potřeba, tak neni ostuda přepisovat engine. Ostuda je nepřepsat to Smile. Můžeš tomu říkat "refaktorizace" Wink. No...já přepisuju pořád. Naposledy to bylo asi před týdnem hlavní okno editoru, kterej dělám.


No a teď se Solertie ani Zpěvů Nyrthu nedočkate(me) Very Happy , protože Voďa začne po přečtení určitě přepisovat engine Twisted Evil Very Happy
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
perry



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

PříspěvekZaslal: 22. listopad 2013, 20:16:42    Předmět: Odpovědět s citátem

No jedna věc je přepisovat, protože se mi to nelíbí a druhá věc je přepisovat, protože potřebuji něco, co tam nejde.
_________________
Perry.cz
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
VODA



Založen: 29. 07. 2007
Příspěvky: 1721
Bydliště: Plzeň

PříspěvekZaslal: 22. listopad 2013, 23:37:06    Předmět: Odpovědět s citátem

Poky napsal:
citace:
Jinak myslím, že pokud to je potřeba, tak neni ostuda přepisovat engine. Ostuda je nepřepsat to Smile. Můžeš tomu říkat "refaktorizace" Wink. No...já přepisuju pořád. Naposledy to bylo asi před týdnem hlavní okno editoru, kterej dělám.


No a teď se Solertie ani Zpěvů Nyrthu nedočkate(me) Very Happy , protože Voďa začne po přečtení určitě přepisovat engine Twisted Evil Very Happy

No to určitě... na to nemám čas, chuť a vlastně ani potřebu...
_________________
Opravdovost se pojí s trýzní...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
TeaTime



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

PříspěvekZaslal: 24. listopad 2013, 13:44:50    Předmět: Odpovědět s citátem

]semo[ napsal:
TeaTime: neměj třídu "Window" a "WindowModule", jak si psal, ale "Game" a "GameModule". Window by mělo obsahovat jen platformně závislý okení srač..y.


Ok, to je fakt. To se mi zase u jednoho projektu stalo, že mělo hodně velké množství tříd v názvu slovo Game, takže si na to teď radši dávám pozor Very Happy.


K renderování: vše ohledně vykreslování jsem se snažil udělat tak, že mám jeden graf (strom) scény a ten je složený z uzlů (věcí k vykreslení). Každý uzel má hloubku, takže se nejdříve vykreslí vždy uzly z podstromu s vyšší hloubkou a pak uzly z podstromu s nižší hloubkou (je to 2D, takže je to pro mě takhle nejjednodušší). To se současně víceméně hodí i pro vykreslování gui. Takže ty WindowModuly/GameModuly by vlastně u mě ani nepotřebovaly metodu Render, ale stačilo by fakt jen Load, Unload, Update a ProcessInput.

Docela se mi zamlouvá ten stack, asi bych to udělal nějak podobně. Ale ještě bych rád (možná) dal těm modulům další funkčnost: A to, aby se mohly navzájem přímo volat - tedy aby jeden modul mohl používat služby jiného modulu. Tam by ale pak bylo potřeba mít něco jako závislosti modulů - tedy když tam vložím nějaký modul, tak ten požaduje přítomnost jiného modulu a pokud tam ten modul ještě není, tak ho to vytvoří. Takže kvůli tomuhle a i kvůli dalším věcem se mi zdálo lepší, aby se hloubka modulů určovala nějak jinak. Možná aby měl každý modul svojí hloubku nebo tak něco.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



Založen: 29. 07. 2007
Příspěvky: 1525
Bydliště: Telč

PříspěvekZaslal: 25. listopad 2013, 11:10:26    Předmět: Odpovědět s citátem

Vykreslovat podle hierarchie (stromu) scény neni dobré. Strom scény se buduje kvůli závsislostem transformací a vlastnictví objektů. Ale rendrovat potřebuješ v jiným pořadí: už třeba klasický solid versus blended objekty: Nejdřív se rendrujou všechny solid objekty v pořadí od nejbližšího k nejvzdálenějšímu (to je kvůli optimalizaci) a teprv potom blendovaný objekty od nejvzdálenějšího k nejbližšímu (kvůli správné průhlednosti). Ve 2D tě to možná trápí míň, ale narazíš zas na něco jinýho. Takže v praxi se to dělá tak, že každej objekt má nějakou metodu která spočítá tzv. "světové transformace" (tzn. absolutní transformace zahrnující rodiče), které se použijí pro redrování. Renderer tedy nemusí znát nic o stromu scény. Renderer si objekty může nést v nějakém obyč. lineárním seznamu, nebo lépe, používá subdivizi (ale to je spíš pro 3D).

Co se týče závislostí a komunikace modulů: zvaž, jestli nestačí nechat to až na implementaci těch konkrétních modulů a ošetřit to až z hi-level vrstvy, než s tim zatěžovat základní interface. Tedy například: Menu má referenci na GameLevel, ale abstraktní GameModule tohle neřeší. Ale to bys musel být asi konkrétnější, o co přesně ti jde.
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
TeaTime



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

PříspěvekZaslal: 25. listopad 2013, 12:14:44    Předmět: Odpovědět s citátem

]semo[: k tomu renderování. To mě trochu znervózňuje, když říkáš, že mohou nastat komplikace. Já to tak vlastně mám, protože tam spojuji dvě funkčnosti do jednoho systému - strom scény (závislosti transformací a vlastnictví objektů) a výpočet hloubky objektu. Problém u 2D je v tom, že Z souřadnice není součástí modelu ani transformace modelu. Musím to tam počítat nějak za běhu. Tak jsem to vyřešil tak, že ten výpočet mám integrovaný rovnou do stromu scény. Tohle spojení dvou funkčností mě sice může v budoucnu komplikovat věci, ale zatím jsi mě nepřesvědčil, že to bude tak zásadní problém aby se mi vyplatilo to rozdělit do vlastní vrstvy.

Komunikace modulů - zvažoval jsem to nedělat tak, že v Menu budu mít pointer na GameLevel, ale že v GameModule bude nějaký (typově) dynamický container, který bude mít odkazy na všechny GameModuly (takže z menu se do GameLevelu dostanu takto: this->game->getModulePrimary<GameModule>() ). Docílil bych tím za prvé toho, že vazby mezi moduly budou o něco volnější, takže bude snadné je případně nahrazovat (i dynamicky) bez nutnosti o tom nějak zásadně uvědomovat ostatní moduly. Za druhé by to usnadnilo chápání vazeb mezi GameModuly - byly by tam pouze reference Game -> GameModule a nemusely by tam být reference typu Menu <-> GameLevel a podobně.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



Založen: 29. 07. 2007
Příspěvky: 1525
Bydliště: Telč

PříspěvekZaslal: 25. listopad 2013, 12:30:49    Předmět: Odpovědět s citátem

Z-ko můžeš přidat jako další member, podobně jako transformace. Dělal jsem 2D engine, uživatel objektu mohl nastavovat Zko sám a bylo to docela šikovné. Plus jsme ještě měli Zka vrstev. Dělali s tim hodně různých efektů a překrývání se řešilo pořád. Dokonce byly i psí kusy typu: jeden objekt (složený z více sprajtů) rozdělenej do různých vrstev (takže tam bys už nepochodil). Ale taky záleží, co od toho chceš, no.

Ta tvá komunikace modulů vypadá dobře :-).
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
TeaTime



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

PříspěvekZaslal: 25. listopad 2013, 18:31:36    Předmět: Odpovědět s citátem

]semo[ napsal:
Ta tvá komunikace modulů vypadá dobře Smile.


Tak jestli to schvaluješ, tak to možná nebude úplná volovina Very Happy. Zkusím to teda ještě promyslet.

Z-souřadnice: jasně, šlo by to udělat jako atribut uzlu stromu scény, ale pak se stejně bude muset ta absolutní souřadnice někde vypočíst - například za pomocí těch vrstev (jak uvádíš), protože dávat to tam rovnou hard-coded během vytváření stromu scény je samozřejmě blbost. Tím, že to nechám počítat ve stromu scény si ušetřím nutnost tam právě dělat ty vrstvy nebo něco podobného a přitom mě nenapadá žádný větší zádrhel. Podle mě to má i svojí logiku, dát to do stromu scény - stejně jako se transformace počítá (skládá) ve stromu, tak je logické, že i ten další member - hloubka - se skládá (i když jinou metodou) při procházení stromu.

Hlavně mi implementace tohoto způsobu výpočtu hloubky zabrala asi jen 15 minut, takže pokud zjistím, že to chci udělat složitěji, tak nějaký systém na lepší výpočet sestrojím až později (ale myslím, že to se ani nestane).

Každopádně díky všem moc za rady, hlavně teda teď ke konci semovi. Už mám docela představu, jak to udělám, tak to ještě dopromyslím a namlátím to tam Smile.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



Založen: 29. 07. 2007
Příspěvky: 1525
Bydliště: Telč

PříspěvekZaslal: 26. listopad 2013, 10:26:34    Předmět: Odpovědět s citátem

Tak ať se daří :-)
_________________
Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory
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 -> C / C++ Časy uváděny v GMT + 1 hodina
Jdi na stránku Předchozí  1, 2
Strana 2 z 2

 
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