.[ ČeskéHry.cz ].
struktura scény
Jdi na stránku 1, 2  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Obecné
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
bolejt



Založen: 02. 05. 2009
Příspěvky: 45

PříspěvekZaslal: 28. listopad 2009, 15:00:11    Předmět: struktura scény Odpovědět s citátem

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 Smile

(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
Zobrazit informace o autorovi Odeslat soukromou zprávu
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 28. listopad 2009, 15:06:07    Předmět: Odpovědět s citátem

grafiku a fyziku oddelit! - fyzikalni objekty jsou mnohonasobne jednodussi nez graficke
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Quiark



Založen: 29. 07. 2007
Příspěvky: 816
Bydliště: Chlívek 401

PříspěvekZaslal: 28. listopad 2009, 15:09:39    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
am!go



Založen: 19. 08. 2007
Příspěvky: 61
Bydliště: Praha

PříspěvekZaslal: 28. listopad 2009, 17:09:47    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
bolejt



Založen: 02. 05. 2009
Příspěvky: 45

PříspěvekZaslal: 28. listopad 2009, 21:30:56    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Augi



Založen: 28. 07. 2007
Příspěvky: 782
Bydliště: Čerčany

PříspěvekZaslal: 28. listopad 2009, 23:41:45    Předmět: Odpovědět s citátem

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 Smile
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
am!go



Založen: 19. 08. 2007
Příspěvky: 61
Bydliště: Praha

PříspěvekZaslal: 29. listopad 2009, 19:32:31    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
]semo[



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

PříspěvekZaslal: 30. listopad 2009, 10:42:49    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
bolejt



Založen: 02. 05. 2009
Příspěvky: 45

PříspěvekZaslal: 1. prosinec 2009, 01:18:29    Předmět: Odpovědět s citátem

]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 Cool
_________________
Ball ball8;
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



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

PříspěvekZaslal: 1. prosinec 2009, 10:19:35    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
bolejt



Založen: 02. 05. 2009
Příspěvky: 45

PříspěvekZaslal: 2. prosinec 2009, 16:47:13    Předmět: Odpovědět s citátem

]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í... Smile

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



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

PříspěvekZaslal: 2. prosinec 2009, 17:53:57    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
bolejt



Založen: 02. 05. 2009
Příspěvky: 45

PříspěvekZaslal: 7. prosinec 2009, 00:37:33    Předmět: Odpovědět s citátem

]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 Smile.

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 Smile 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
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



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

PříspěvekZaslal: 7. prosinec 2009, 09:44:51    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
bolejt



Založen: 02. 05. 2009
Příspěvky: 45

PříspěvekZaslal: 8. prosinec 2009, 00:21:50    Předmět: Odpovědět s citátem

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... Smile
_________________
Ball ball8;
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 -> Obecné Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2  Další
Strana 1 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