.[ ČeskéHry.cz ].
Výpočet kolize objektů
Jdi na stránku 1, 2, 3  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
Juraj



Založen: 06. 12. 2007
Příspěvky: 189

PříspěvekZaslal: 4. duben 2008, 12:17:29    Předmět: Výpočet kolize objektů Odpovědět s citátem

Tak zdravím Vás,

už mám zase "touhu" něco tvořit a potřebuji vaši radu Laughing

chtěl bych v 3D scéně začí se základnímy výpočty kolizí, např. kam objekt u kamery (člověk) může, kam ne, aby se nepropadl a nebo neprolezl zeď. Mě samotného napadá vytvořit si nějaké pole, které bude např. obsahovat pomocí nějakého vzorečku ifnormace zda tam a tam může a při změně pozice bych to v tomto poli testoval, ale nejsem si jist jak moc rychlé by toto řešení bylo.

Jaká je Vaše praxe?? Je více způsobů jak vypočítat kolize??
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Augi



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

PříspěvekZaslal: 4. duben 2008, 12:54:33    Předmět: Odpovědět s citátem

No mít trojrozměrné pole booleanů je sice rychlá možnost, ale jen pro statické objekty - v případě testování vzájemné kolize dynamických objektů bys musel to pole dost updatovat. Ale tahle metoda by asi byla dost paměťově náročná a taky nepřesná.

V 3D grafice se pro výpočet kolize používají často nějaké obalující objekty - např. koule nebo kvádry. Tyto objekty mohou být navíc strukturované, tzn. že nejprve se testuje kolize proti kouli a pokud je pozitivní, tak se dále testuje kolize vůči několika menším objektům (koulím, kvádrům, příp. i geometrie meshe) uvnitř velké koule.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Juraj



Založen: 06. 12. 2007
Příspěvky: 189

PříspěvekZaslal: 4. duben 2008, 13:04:12    Předmět: Odpovědět s citátem

Augi napsal:
No mít trojrozměrné pole booleanů je sice rychlá možnost, ale jen pro statické objekty - v případě testování vzájemné kolize dynamických objektů bys musel to pole dost updatovat. Ale tahle metoda by asi byla dost paměťově náročná a taky nepřesná.

V 3D grafice se pro výpočet kolize používají často nějaké obalující objekty - např. koule nebo kvádry. Tyto objekty mohou být navíc strukturované, tzn. že nejprve se testuje kolize proti kouli a pokud je pozitivní, tak se dále testuje kolize vůči několika menším objektům (koulím, kvádrům, příp. i geometrie meshe) uvnitř velké koule.


Ano i to mě napadlo, obalit složitější objekty jakoby kvádrem, který by určoval meze daného objektu, ale pořád nějak nevím jak to vzájemně tetovat proti sobě, nebo např proti 3D terénu.

Nebo pokud jsem to správně pochopil, vždy bych jednoduše testoval pohybující se "kvádr" proti všem ostatním kvádrů? Asi bych nemusel proti všem, jen proti těm v okolí..
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Augi



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

PříspěvekZaslal: 4. duben 2008, 14:16:00    Předmět: Odpovědět s citátem

Jo - testuješ jen kvádry proti sobě - příp. si není problém dopsat kolizi kvádr - koule a používat oba typy obalovacích objektů.

To abys testoval jen kvádry v okolí si můžeš zajistit např. tím, že ve světě budeš mít několik oblastí (reprezentovaných např. kvádry) a každý objekt bude vědět, do kterých světových kvádrů zasahuje. Pak stačí zkoušet kolizi na objekty, které se zasahují do stejných světových kvádrů jako testovaný objekt.
Můžeš klidně udělat "pravidelné světové kvádry" tak, že si svět rozřežeš mřížkou na oblasti. Pak každé oblasti bude příslušet jedna položka v poli, kterou můžeš jednoduše naindexovat výpočtem z pozice testovaného objektu. Tato položka si bude jednoduše pamatovat, které objekty do příslušné oblasti zasahují...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Quiark



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

PříspěvekZaslal: 4. duben 2008, 14:16:44    Předmět: Odpovědět s citátem

Pokud nemáš velkou scénu s mnoha objekty, tak by mohlo stačit každý s každým. Jinak můžeš zvážit nějaké metody na dělení prostoru (BSP trees, quadtrees, ...), se kterými se dá poměrně rychle zjistit, které objekty jsou poblíž.
_________________
Mám strach
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: 8. duben 2008, 11:01:03    Předmět: Odpovědět s citátem

Tohle sem před pár rokama dělal ve své první hře, takže sem toho ještě moc neuměl. Udělal sem to tak, že objekty se poskládaly z několika kvádrů a koulí (přičemž kvádry jsou mnohem užitečnější, řek bych) a terén byla výšková mapa, která měla funkci pro vrácení výšky v nějakém bodě. Testoval sem každý pohybující se objekt vůči každému pohybujícímu i statickému objektu. Clustering sem dopsal až dýl (když scéna obsahovala pár stovek kolizních objektů). Abych nezapoměl, pohybující se objekty měly navíc kromě koulí a kvádrů i kolizní body pro ten terén.

Suma sumárum, potřeboval sem napsat: KvádrXKvádr, KvádrXKoule, KouleXKoule, BodXVýšková mapa.

Na Č-H jsem o tom napsal i článek, ale po velkém pádu se asi ztratil, můžu ti ho poslat.
_________________
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
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 8. duben 2008, 15:40:45    Předmět: Odpovědět s citátem

]semo[ napsal:
Na Č-H jsem o tom napsal i článek, ale po velkém pádu se asi ztratil, můžu ti ho poslat.

A nebo znovu vydat.
_________________
AMD Open Source Graphics Driver Developer
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: 8. duben 2008, 17:51:42    Předmět: Odpovědět s citátem

Eosie:
i to by šlo, kdyžtak ať se některý z adminů vyjádří
_________________
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
OndraSej



Založen: 28. 07. 2007
Příspěvky: 767
Bydliště: Brandýs nad Labem

PříspěvekZaslal: 8. duben 2008, 18:10:16    Předmět: Odpovědět s citátem

semo> Pravdepodobne to tu mam, takze znovuvydani by nemel byt problem. Jinak tech clanku je vic, tak ktery je tehle konkretni, at to nemusim cist Smile
- Pojednání o optimalizaci herních 3D enginů
- Vykreslování rozsáhlé krajiny v reálném čase
- Skrytá úskalí v 3D
_________________
http://trionteam.net
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: 9. duben 2008, 08:37:34    Předmět: Odpovědět s citátem

ani jeden :)

byl to seriál, který byl v tomto pořadí:

1) Fyzika pro lamy od lamy (a další vlnolamy)
2) Kolize a následná reakce
3) Skládání fyzikálních objektů

A druhej byl ten o kolizích. Z těch co si psal, stojí za znovuvydání Skrytá úskalí v 3D, řek bych. Ale kolizí se netý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
OndraSej



Založen: 28. 07. 2007
Příspěvky: 767
Bydliště: Brandýs nad Labem

PříspěvekZaslal: 9. duben 2008, 10:04:50    Předmět: Odpovědět s citátem

Tak ja to jeste jednou prohrabu a nebudu hledat podle jmena, ale podle nazvu.
_________________
http://trionteam.net
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: 9. duben 2008, 12:41:43    Předmět: Odpovědět s citátem

kdyžtak to má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
Juraj



Založen: 06. 12. 2007
Příspěvky: 189

PříspěvekZaslal: 9. duben 2008, 13:00:49    Předmět: Odpovědět s citátem

Jen bych se chtěl ještě zeptat, jak snadno vyrvořit pomyslnou kvádr kolem daného objektu např kolem modelu??

Nevím zda se snažím jít správnou cestou, ale myslím is že by to mělo jít vypočítat pomocí world matice objektu, je to tak? Nebo existuje nějaký snažší spůsob, já daný objekt vykrelsuji po částech, proto mě jiná možnost nenapadá..
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: 9. duben 2008, 18:11:32    Předmět: Odpovědět s citátem

Vykreslování od kolizí odděl (jestli si to myslel takhle).

Jinak jestli máš objekt složenej z více pohybujících se objektů, a každej má nějakej kvádr okolo sebe, tak by to šlo udělat takhle:

Vezmeš rohový body všech těch kvádrů, vynásobíš je světovou transformační maticí každýho toho objektu a zjistíš minima a maxima. Tím získáš osově zarovnaný kvádr. Kdybys chtěl osově nezarovnaný, tak ty bode ještě budeš muset transformovat do lokálních souřadnic kořene toho objektu (pomocí invertované světové transformační matice). Pak opět sebereš minima a maxima...

Jinak ale myslím, že to na kolize neni potřeba. Před test můžeš udělat pomocí koulí. Je to myslím rychlejší (i když to neni tak dokkonalá obálka), protože nemusíš tak náročně počítat osově nezarovnaný bounding box.

EDIT: Jestli si myslel samotný kolizní boxy, tak ty je dobrý rozmístit v nějakým editoru. Může to bejt i modeler co používají grafici (max, maya) s nějakým jednoduchým (skriptovaným) exporterem.
_________________
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
Juraj



Založen: 06. 12. 2007
Příspěvky: 189

PříspěvekZaslal: 21. duben 2008, 09:38:17    Předmět: Odpovědět s citátem

Tak jelikož moje matematika v 3D prostoru trochu pokulhává, potřeboval bych od Vás pomoct.

Potřebuj si vypočítat souřadnice např kvádru kolem vykresleného objektu, tak abych mohl testovat zda jsem náhodou neklik na daný objkt.

Osobně si myslím, že pro výpočet použiji nějaké body z world matice objectu, ale nevím jak dostat ty správné abych to mohl testovat při kliku na plátno.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> 3D API / 3D Enginy Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2, 3  Další
Strana 1 z 3

 
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