Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
tomkis
Založen: 06. 06. 2011 Příspěvky: 33
|
Zaslal: 19. srpen 2012, 16:01:08 Předmět: obecné řešení kolizí |
|
|
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 |
|
|
Vilem Otte
Založen: 18. 09. 2007 Příspěvky: 462 Bydliště: Znojmo - Sedlesovice, Kravi Hora
|
Zaslal: 19. srpen 2012, 16:53:22 Předmět: |
|
|
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 |
|
|
nem0
Založen: 23. 03. 2009 Příspěvky: 31
|
Zaslal: 20. srpen 2012, 18:56:20 Předmět: |
|
|
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 |
|
|
Vilem Otte
Založen: 18. 09. 2007 Příspěvky: 462 Bydliště: Znojmo - Sedlesovice, Kravi Hora
|
Zaslal: 21. srpen 2012, 20:30:30 Předmět: |
|
|
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 (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 |
|
|
nem0
Založen: 23. 03. 2009 Příspěvky: 31
|
Zaslal: 22. srpen 2012, 09:03:31 Předmět: |
|
|
Nenapisal som tu druhu cast moc zrozumitelne, preto prilozim k tomu obrazok
|
|
Návrat nahoru |
|
|
Vilem Otte
Založen: 18. 09. 2007 Příspěvky: 462 Bydliště: Znojmo - Sedlesovice, Kravi Hora
|
Zaslal: 22. srpen 2012, 11:30:44 Předmět: |
|
|
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 |
|
|
nem0
Založen: 23. 03. 2009 Příspěvky: 31
|
Zaslal: 22. srpen 2012, 12:43:47 Předmět: |
|
|
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 |
|
|
|