Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
bolejt

Založen: 02. 05. 2009 Příspěvky: 45
|
Zaslal: 28. listopad 2009, 15:00:11 Předmět: struktura scény |
|
|
jak se do grafu scény zakomponuje fyzika či herní logika, tj. hmatatelný herní objekt definovaný zdravím (např.), nějakou logikou, vzhledem a fyzikálním objektem? když jsem prolézal net, tak jsem nalezl názory o vhodnosti grafu scény pouze pro renderování.
sám jsem už nějakou stromovou strukturu scény vymyslel, ale spíš si vyslechnu nějaké názory, abych věděl, jestli má tu cenu přetvořit ten můj bazmekt diagramu tříd na papíře do uml v pc
(klidně mě nasměrujte na nějakou vhodnou literaturu/stránku, ale většina scene graph literatury se imho zabývá jen renderováním) _________________ Ball ball8;
Naposledy upravil bolejt dne 1. prosinec 2009, 10:14:55, celkově upraveno 1 krát |
|
Návrat nahoru |
|
 |
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 28. listopad 2009, 15:06:07 Předmět: |
|
|
grafiku a fyziku oddelit! - fyzikalni objekty jsou mnohonasobne jednodussi nez graficke |
|
Návrat nahoru |
|
 |
Quiark

Založen: 29. 07. 2007 Příspěvky: 816 Bydliště: Chlívek 401
|
Zaslal: 28. listopad 2009, 15:09:39 Předmět: |
|
|
Nebude to nějak tak, že herní objekt, který má herní vlastnosti (HP, počet nábojů, ...) a příslušnou logiku pak má odkaz na 3D objekt, který je jeho grafickou reprezentací a případně podobně i fyzikální objekt? _________________ Mám strach |
|
Návrat nahoru |
|
 |
am!go

Založen: 19. 08. 2007 Příspěvky: 61 Bydliště: Praha
|
Zaslal: 28. listopad 2009, 17:09:47 Předmět: |
|
|
Objekty ve scene se casto nazyvaji entity.
Jeden z modernich zpusobu, jak osefovat tvuj problem, je tvorit nejaky komponenty (reprezentujici grafickou, fyzikalni, ... cast entity), ktery potom na entity napojujes.
edit: koukni na http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/ |
|
Návrat nahoru |
|
 |
bolejt

Založen: 02. 05. 2009 Příspěvky: 45
|
Zaslal: 28. listopad 2009, 21:30:56 Předmět: |
|
|
rezna, Quiark: třeba v jMonkeyEngine physics je snaha vše integrovat do scene graph, jestli jsem to správně pochopil. viz. stránka s obrázky. můj návrh počítá s určitým oddělením, tohle jsem vytáhl z papíru do yUML:
pracuji ve 2d a Drawable je viditelná grafická reprezentace (Animovaný sprite například). PhysicalBody bych tvořil pomocí nějaké Factory.
no ale v každém případě jak byste pořádně oddělili fyziku ze scene graph, když grafická reprezentace je imho úzce spjatá s reprezentací fyzickou?
am!go: přečetl jsem článek i diskuzi, mrknul na zdrojové články a stáhl něčí zdroják.
jestli jsem to pochopil, Entity je v podstatě jakýkoliv objekt v herním světě. Component může být grafická reprezentace, fyzikální objekt, skript, dokonce i pohyb, cokoliv. Entity má seznam/pole svých Component. mno ještě se podívám na stáhnutý zdroják, nedokážu si představit, jak tohle funguje v praxi.
zkoušel jsi tento systém implementovat? _________________ Ball ball8; |
|
Návrat nahoru |
|
 |
Augi

Založen: 28. 07. 2007 Příspěvky: 782 Bydliště: Čerčany
|
Zaslal: 28. listopad 2009, 23:41:45 Předmět: |
|
|
rezna a Quiark mají IMHO pravdu. Herní objekt by měl mít odkaz na svou grafickou a fyzikální reprezentaci a starat se o synchronizaci dat mezi nimi (např. fyzika vypočítá novou pozici, tak je potřeba ji zpropagovat do grafického objektu).
Jak si pastl ten grafík, tak ten výše uvedené splňuje. To, že máš herní objekty strukturované do stromu je Tvoje věc  |
|
Návrat nahoru |
|
 |
am!go

Založen: 19. 08. 2007 Příspěvky: 61 Bydliště: Praha
|
Zaslal: 29. listopad 2009, 19:32:31 Předmět: |
|
|
bolejt napsal: |
am!go: přečetl jsem článek i diskuzi, mrknul na zdrojové články a stáhl něčí zdroják.
jestli jsem to pochopil, Entity je v podstatě jakýkoliv objekt v herním světě. Component může být grafická reprezentace, fyzikální objekt, skript, dokonce i pohyb, cokoliv. Entity má seznam/pole svých Component. mno ještě se podívám na stáhnutý zdroják, nedokážu si představit, jak tohle funguje v praxi.
zkoušel jsi tento systém implementovat? |
Shodou okolností na tom zrovna pracuju. Vzhledem ke komplexnosti dnešních scén ve hrách mi to příjde jako daleko lepší způsob, než ty entity od sebe dědit a dědit ..... až dodědit.
Tenhle obrázek je právě docela výstižnej
Docela pěkně maj tenhle systém udělanej v Unity3D http://unity3d.com/
tak se můžeš podívat. |
|
Návrat nahoru |
|
 |
]semo[

Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 30. listopad 2009, 10:42:49 Předmět: |
|
|
trochu rejpavej OT:
bolejt, od Javařů bych si inspiraci pro 3D grafiku zrovna nebral :)
Jinak já používal to, co už někteří zmiňovali: zvlášť fyzikální objekt, zvlášť grafický, zvukový, ...jakýkoliv další. Pak je v herním kódu třeba nějaký "GameObject", který to vše zapouzdřuje a teprve nad tím je Vehicle, Player, ... .
Ale i tak se herní kód může vyhnout použití "GameObjectu" a poskládat si z low level objektů nějaký speciální případ (např. 2x grafický objekt, jeden fyzikální, žádný zvuk). _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
 |
bolejt

Založen: 02. 05. 2009 Příspěvky: 45
|
Zaslal: 1. prosinec 2009, 01:18:29 Předmět: |
|
|
]semo[, Augi: uznávám, rozdělit vše na podsystémy je lepší, na entity a komponenty zdá se i skvělý.
am!go: díky, spousta materiálu pročtena. zítra nebo pozítří se na to vrhnu a dost možná sem přisypu další otravné otázky  _________________ Ball ball8; |
|
Návrat nahoru |
|
 |
]semo[

Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 1. prosinec 2009, 10:19:35 Předmět: |
|
|
Ještě upřesním nějaké podrobnosti mnou používané architektury:
Pro transformace a hierarchii jsem měl objekt SceneNode, kterej obsahoval transformační matici a k ní příslušné metody, měl pod sebou další scene nody a celkově to byl strom.
kód: |
SceneRoot
|
+--SceneNode
+--SceneNode
+--SceneNode
| |
| +--SceneNode
| +--...
|
+--SceneNode |
Tyto obecné objekty nevědí nic o grafice, fyzice a td. Ale každá SceneNode má na sobě zavěšen libovolný počet "SceneObject", ze kterých jsou odvozený grafický objekty, fyzikální objekty, zvukový objekty, ... . Při změně transformace SceneNode se vyvolá metoda NodeChanged pro jí podřazený SceneObjekty. SceneObjekty jsou na nodě připojený bez hierarchie, tzn. žádný strom, pouze seznam.
kód: |
SceneRoot
|
+--SceneNode [GraphicObject, PhysicalObject, SoundObject, JinyObject]
|
+--SceneNode
|
Má to spoustu výhod a je to přehledný. Například: pomocí prázdný SceneNode se dají definovat různé checkpointy a místa na modelech. A přijde mi to logický, protože nejen grafický objekt potřebuje transformace a proto by je neměl vlastnit, ale sdílet s ostatními (v tomto případě přes SceneNode).
Herní kód pak většinou pracoval se SceneNode, případně s nějakým herním objektem, který vlastnil SceneNode. _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
 |
bolejt

Založen: 02. 05. 2009 Příspěvky: 45
|
Zaslal: 2. prosinec 2009, 16:47:13 Předmět: |
|
|
]semo[: jestli jsem to správně pochopil, tak tvé řešení je shodou okolností skoro to samé jako má Unity3d. abych upřesnil odlišnosti, které jsem postřehl: samozřejmě jiná terminologie (GameObject/Component) a transformační matici obsahuje jedna Component, která je v GameObject přítomna vždy.
každopádně bys mohl být dobrý zdroj informací...
předpokládám správně, že jsi zachoval "scene graph" pro grafiku?
jak tvoříš grafický, fyzikální SceneObject, to používáš něco na způsob Factory pattern?
jak přistupuješ k položkám SceneObject v tom seznamu? např. pokud z nějakého důvodu potřebuješ provést něco s fyzikálním SceneObject určitého SceneNode. _________________ Ball ball8; |
|
Návrat nahoru |
|
 |
]semo[

Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 2. prosinec 2009, 17:53:57 Předmět: |
|
|
bolejt napsal: |
samozřejmě jiná terminologie (GameObject/Component) a transformační matici obsahuje jedna Component, která je v GameObject přítomna vždy.
|
Právěže v GameObject transformační matice neni, je ve SceneNode, která je tím objektem vlastněna (nebo je GameObject poděděn ze SceneNode, to už si nepamatuju).
bolejt napsal: |
předpokládám správně, že jsi zachoval "scene graph" pro grafiku?
|
ne, grafika pracuje jen s transformační maticí, kterou jí vrátí GraphicObject - ten je poděděný od SceneObject, který visí na SceneNodě. Ta Noda má teprve světovou transformační matici (světová se spočítá po pohybu nody metodou Update). Takže když Render chce tuhle matici, GraphicObject pro ni sáhne do SceneNody. Pokud neni objekt připojen k nodě, vrací jednotkovou matici.
bolejt napsal: |
jak tvoříš grafický, fyzikální SceneObject, to používáš něco na způsob Factory pattern? ...
|
Objekty se vytvářely různými způsoby. Přímo z kódu nějak natvrdo, nebo podle XML. GameObjekty byly už při vytváření obeznámeny s tím, že mají pod sebou SceneNodu obsahující fyzikální/grafiký/... objekt. Každopádně ve SceneNode nebyla jiná možnost získání SceneObject, než podle jména či indexu. "Spolupráce" Node a Objektů probíhala tak, že pokud se Nodě změnila transformace, obeznámila s tím všechny své SceneObjecty voláním virtuální metody. Dalo by se tedy obecně říct, že Noda pouze definovala orientaci a hierarchii v prostoru a pomocí ní mohly tyto dvě vlastnosti sdílet objekty, které dohromady tvoří model.
UF, hodně nod, hodně objektů, kdyžtak pošlu zdroják :-). _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
 |
bolejt

Založen: 02. 05. 2009 Příspěvky: 45
|
Zaslal: 7. prosinec 2009, 00:37:33 Předmět: |
|
|
]semo[ napsal: |
Právěže v GameObject transformační matice neni, je ve SceneNode, která je tím objektem vlastněna (nebo je GameObject poděděn ze SceneNode, to už si nepamatuju).
|
asi jsme si nerozuměli, já jsem popisoval, co jsem vyčetl o Unity3D engine, který by měl být založen na podobném principu. v tom Entity/Component to vypadá zhruba takhle: Entity je v tvém případně SceneNode, Unity3D má GameObject a Component je SceneObject, Unity3D má Component.
]semo[ napsal: |
ne, grafika pracuje jen s transformační maticí, kterou jí vrátí GraphicObject - ten je poděděný od SceneObject, který visí na SceneNodě. Ta Noda má teprve světovou transformační matici (světová se spočítá po pohybu nody metodou Update). Takže když Render chce tuhle matici, GraphicObject pro ni sáhne do SceneNody. Pokud neni objekt připojen k nodě, vrací jednotkovou matici.
|
aha, takhle. moje představa je třeba jednou integrovat tento systém s cizím grafickým a fyzikálním API. GraphicComponent obalí grafickou stránku a PhysicalComponent tu fyzickou, čímž se to všechno zkomplikuje. tvořit instance bych dělal asi pomocí factory method, "RenderableFactory" a "PhysicalBodyFactory". nemám to promyšlené a domyšlené...
]semo[ napsal: |
Objekty se vytvářely různými způsoby. Přímo z kódu nějak natvrdo, nebo podle XML. GameObjekty byly už při vytváření obeznámeny s tím, že mají pod sebou SceneNodu obsahující fyzikální/grafiký/... objekt. Každopádně ve SceneNode nebyla jiná možnost získání SceneObject, než podle jména či indexu. "Spolupráce" Node a Objektů probíhala tak, že pokud se Nodě změnila transformace, obeznámila s tím všechny své SceneObjecty voláním virtuální metody. Dalo by se tedy obecně říct, že Noda pouze definovala orientaci a hierarchii v prostoru a pomocí ní mohly tyto dvě vlastnosti sdílet objekty, které dohromady tvoří model.
|
snad i chápu. kromě nově jmenovaného prvku GameObject. zmínil jsi ho i na začátku.
i tak zkusím střelit pár otázek:
v tomto Node/Object systému nemáš nic jako Object pro skripty? reakce na vstup uživatele je zase jiný systém?
to když instance SceneObject sedí v instanci SceneNode, tak netuší nic o ostatních instancích SceneObject ve stejném SceneNode?
omezuješ nějakým způsobem počet konkrétních Component (SceneObject)? například jestli nějakým způsobem omezíš v SceneNode počet instancí GraphicObject/PhysicalObject nebo to necháváš na programátorovi?
]semo[ napsal: |
UF, hodně nod, hodně objektů, kdyžtak pošlu zdroják .
|
já se to pokusím nějakým způsobem implementovat, vidět zdroják by už bylo proti mé snaze si s tím trochu pohrát. když už nepomůžou slova, pošli mě alespoň slušně někam každopádně díky.
ale asi bych se měl přestat ptát a zkusit už něco udělat.
a omlouvám se za pomalé reakce, ale konec semestru se blíží a tlak se zvyšuje. _________________ Ball ball8; |
|
Návrat nahoru |
|
 |
]semo[

Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 7. prosinec 2009, 09:44:51 Předmět: |
|
|
bolejt napsal: |
v tomto Node/Object systému nemáš nic jako Object pro skripty? reakce na vstup uživatele je zase jiný systém?
|
Objekt pro skripty tam nemám. Máš namysli nějaký dummy objekty? Místo nich sme používali většinou přímo prázdnou SceneNode (definuje nějaký bod v prostoru...). Kouzlo je právě v tvárnosti tohodle systému, takže i to bys tam mohl dodělat.
bolejt napsal: |
to když instance SceneObject sedí v instanci SceneNode, tak netuší nic o ostatních instancích SceneObject ve stejném SceneNode?
|
Netuší. V případě potřeby jim potřebnou komunikaci zprostředkovává kód navrchu.
bolejt napsal: |
omezuješ nějakým způsobem počet konkrétních Component (SceneObject)? například jestli nějakým způsobem omezíš v SceneNode počet instancí GraphicObject/PhysicalObject nebo to necháváš na programátorovi?
|
Nechávám to na programátorovi. _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
 |
bolejt

Založen: 02. 05. 2009 Příspěvky: 45
|
Zaslal: 8. prosinec 2009, 00:21:50 Předmět: |
|
|
díky za informace. já se trochu obávám toho, že jakmile přidám mezi komponenty něco zajímavějšího, třeba ScriptComponent, postupně vyměním komplexní hierarchii za závislosti konkrétních Component. ale i tak to bude asi lepší...
ad zdrojáky: na téma Entity/Component je docela pomálu implementačních detailů a ty můžeš být někomu velkým přínosem, takže jestli jsou tvé zdrojáky z nekomerčního projektu a nevadí ti je zveřejnit...  _________________ Ball ball8; |
|
Návrat nahoru |
|
 |
|