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č
|
Zaslal: 21. listopad 2013, 10:58:24 Předmět: |
|
|
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 |
|
|
Ladis
Založen: 18. 09. 2007 Příspěvky: 1533 Bydliště: u Prahy
|
Zaslal: 21. listopad 2013, 13:18:12 Předmět: |
|
|
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 |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1525 Bydliště: Telč
|
Zaslal: 21. listopad 2013, 13:32:51 Předmět: |
|
|
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 |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1525 Bydliště: Telč
|
Zaslal: 21. listopad 2013, 13:46:41 Předmět: |
|
|
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 |
|
|
perry
Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 21. listopad 2013, 13:47:06 Předmět: |
|
|
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 ?
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 Budu to muset přepsat na jeden "globální" renderer, co drží všechno _________________ Perry.cz |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1525 Bydliště: Telč
|
Zaslal: 22. listopad 2013, 10:15:30 Předmět: |
|
|
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 |
|
|
Poky
Založen: 29. 06. 2009 Příspěvky: 184 Bydliště: Písek / Plzeň
|
Zaslal: 22. listopad 2013, 19:04:41 Předmět: |
|
|
citace: |
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. |
No a teď se Solertie ani Zpěvů Nyrthu nedočkate(me) , protože Voďa začne po přečtení určitě přepisovat engine |
|
Návrat nahoru |
|
|
perry
Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 22. listopad 2013, 20:16:42 Předmět: |
|
|
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 |
|
|
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 22. listopad 2013, 23:37:06 Předmět: |
|
|
Poky napsal: |
citace: |
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. |
No a teď se Solertie ani Zpěvů Nyrthu nedočkate(me) , protože Voďa začne po přečtení určitě přepisovat engine |
No to určitě... na to nemám čas, chuť a vlastně ani potřebu... _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
|
TeaTime
Založen: 17. 06. 2011 Příspěvky: 264
|
Zaslal: 24. listopad 2013, 13:44:50 Předmět: |
|
|
]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 .
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 |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1525 Bydliště: Telč
|
Zaslal: 25. listopad 2013, 11:10:26 Předmět: |
|
|
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 |
|
|
TeaTime
Založen: 17. 06. 2011 Příspěvky: 264
|
Zaslal: 25. listopad 2013, 12:14:44 Předmět: |
|
|
]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 |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1525 Bydliště: Telč
|
Zaslal: 25. listopad 2013, 12:30:49 Předmět: |
|
|
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 |
|
|
TeaTime
Založen: 17. 06. 2011 Příspěvky: 264
|
Zaslal: 25. listopad 2013, 18:31:36 Předmět: |
|
|
]semo[ napsal: |
Ta tvá komunikace modulů vypadá dobře . |
Tak jestli to schvaluješ, tak to možná nebude úplná volovina . 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 . |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1525 Bydliště: Telč
|
Zaslal: 26. listopad 2013, 10:26:34 Předmět: |
|
|
Tak ať se daří :-) _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
|