.[ ČeskéHry.cz ].
obecné řešení kolizí

 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Fyzikální modely
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
tomkis



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

PříspěvekZaslal: 19. srpen 2012, 16:01:08    Předmět: obecné řešení kolizí Odpovědět s citátem

ahoj, momentálně řeším kolizní systém pro mojí velmi jednoduchou 3rd person 3D hru. Mělo by se jedna o postavu pohybujicí se v nějákém prostředí, třeba v nějáké místnosti. Bohužel netuším jak komplexně řešit kolize.
Z počátku mne napadlo využít detekci dle bounding sphere(hráč) + jakási kolizní geometrie kteoru vytvořím a použiju AABB na prostředí... zjistil jsem že pro kolizi s prostředím je toto absolutně nevhodné. A tak asi uvažuji nad kolizí sphere vs triangle ... otázka je zdali to vůbec je reálné + jak řešit kolizi 3rd person camery ? Díky za rady.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Vilem Otte



Založen: 18. 09. 2007
Příspěvky: 462
Bydliště: Znojmo - Sedlesovice, Kravi Hora

PříspěvekZaslal: 19. srpen 2012, 16:53:22    Předmět: Odpovědět s citátem

Kolize sphere-triangle či aabb-triangle je triviální (pozn. nicméně u pohybujících se věcí je dobré uvažovat o tom, že koule či aabb se pohybuje a použijí se tzv. swept testy - dej do google swept sphere-triangle collision, je spousta stránek které toto vysvětlí).

Nicméně, asi je jasné, že pokud máš kolizní geometrii o 100 000 trianglech, tak testovat kouli vůči každému není příliš rychlé ... řešení je naprosto nečekané a jednoduché. Pro triangly vytvoříš buď spatiální (BSP-Tree, či i klasický Grid může postačit) či objektovou (Bounding volume hierarchy) hierarchii pomocí AABB (např.). Pak ve stromu hledáš pouze kolize s těmi triangly, kterých se může koule potenciálně dotknout - velmi rychle tak zredukuješ počet testů.

Pak už máš více-méně (co se rychlosti týče) state-of-the-art kolizní systém (tedy pokud máš optimální matematickou knihovnu) - který je velmi dobře použitelný.

Na 3rd person kameru se používá jednoduchý ray-cast k postavě zda je vidět se zjištěním všech hitpointů po cestě. Pokud tam nějaký je (e.g. něco překáží k výhledu na postavu), posuneš kameru před něj tak, aby nic nepřekáželo mezi kamerou a postavou. Jsou také další triky jak toto provést (třeba pomocí průhlednosti) - které je vhodné využít např. pro alfa-testované objekty (listy na stromech, apod.).
_________________
Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
nem0



Založen: 23. 03. 2009
Příspěvky: 31

PříspěvekZaslal: 20. srpen 2012, 18:56:20    Předmět: Odpovědět s citátem

S tou 3rd person kamerou to nemusi byt tak jednoduche. Dost zalezi na tom ci je priamo za hracom ako v assassins creed alebo je napravo od hraca ako napriklad gears of war. V druhom pripade ti jeden raycast bude stacit na to, aby kamera nebola v ziadnom objekte, ale stale moze byt na 75% ploche monitora vidiet objekt, ktory je 5cm pred kamerou. Druha vec je, ze aj ked zistis raycastom, ze je kamera vnutry objektu, nestaci ju posunut do miesta kolizie, lebo predna orezavacia rovina ti stale moze orezat veci tak, aby to vyzeralo ze si v objekte. A s podobnymi problemami by sa dalo pokracovat este dlho.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Vilem Otte



Založen: 18. 09. 2007
Příspěvky: 462
Bydliště: Znojmo - Sedlesovice, Kravi Hora

PříspěvekZaslal: 21. srpen 2012, 20:30:30    Předmět: Odpovědět s citátem

Jeden raycast stačit nemusí - samozřejmě záleží na scéně - o tom není pochyb. Pro pohled álá Assassin ti zřejmě 1 stačit bude, pro pohled přes rameno nebude kamera v žádném objektu a půjde zajisté vidět nejméně postava (tedy jeden stačí), nicméně hází se obvykle ještě jeden dopředu, v případě věcí, které leží ze stropu dolů, bys viděl pouze ty - pak je vhodné uvažovat i s nimi.

Nicméně s druhou věcí rozhodně nemáš pravdu, posuneš li kameru na místo kolize NEJBLIŽŠÍ od cílového objektu, a blízká ořezávací rovina je větší než 0 (což by vždy být měla) - nelze vidět objekt na jehož povrchu kamera leží nyní a je zaručeně vidět postava Wink (snad už je to jasné - pokud ne, uploadnu obrázek, který to vysvětlí)
_________________
Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
nem0



Založen: 23. 03. 2009
Příspěvky: 31

PříspěvekZaslal: 22. srpen 2012, 09:03:31    Předmět: Odpovědět s citátem

Nenapisal som tu druhu cast moc zrozumitelne, preto prilozim k tomu obrazok
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Vilem Otte



Založen: 18. 09. 2007
Příspěvky: 462
Bydliště: Znojmo - Sedlesovice, Kravi Hora

PříspěvekZaslal: 22. srpen 2012, 11:30:44    Předmět: Odpovědět s citátem

Jop, tak takto se to stát může (já to pochopil tak, že ta stěna nebude rovnoběžná s kamerou, ale kolmá). U mě jsem tento problém řešil tím, že kamera je ještě obklopena bounding sphere o velikosti near plane (proto mě to nenapadlo v souvislosti s raycasty - samozřejmě většina her to dělá obdobně).
_________________
Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
nem0



Založen: 23. 03. 2009
Příspěvky: 31

PříspěvekZaslal: 22. srpen 2012, 12:43:47    Předmět: Odpovědět s citátem

Zdetekovat tento pripad cez bounding box samozrejme nie je problem, problem je kam posunut kameru. Samozrejme je riesitelny mnohymi sposobmi, len na to vsetko je dobre mysliet dopredu.
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 -> Fyzikální modely Časy uváděny v GMT + 1 hodina
Strana 1 z 1

 
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