Domanda

In quei giorni sto creando il mio gioco molto prima 3d e mi sono imbattuto in'VE paio di problemi.

Ho letto su AABB intersectioning e l'idea di costruire alberi da esso, ma l'unica cosa che non riuscivo a capire è che, se i miei ruota "carattere" durante il gioco, il concetto di asse allineato non si conserva!

Ho controllato un paio di librerie (come oz-scontrano, OPCODE, e altro ancora), e ho visto che le implementazioni sono state fatte per oggetti statici, perché utilizza le scatole, senza un'origine (per non statico, tutti i nodi dell'albero dovrebbero essere aggiornati dopo ogni movimento).

Queste librerie supposti di essere super-veloce, e ho avuto qualche parte, probabilmente sbaglia.

Può qualcuno si prega di aiutare me con spargimento po 'di luce su questo argomento?

È stato utile?

Soluzione

Purtroppo sì, se i tuoi ruota personaggio è necessario ricalcolare l'AABB, e non sarà necessariamente una perfetta aderenza sia. Se si dispone di un rettangolo e ruotarlo in modo non è più rectiliniear AABB sarà più grande dell'oggetto.

L'AABB è veloce perché il test di intersezione è molto semplice, ma come hai già scoperto diventa problematico quando sono necessarie le intersezioni precise su oggetti non allineati agli assi AABBs.

L'AABB è ancora utile per i test rapidi, che ho il sospetto quegli alberi sono fatti per. Con un albero AABB è possibile eliminare rapidamente ampie fasce di oggetti da una fase di test più accurato. Se la query restituisce un paio di più oggetti non importa più di tanto. Nel tuo caso personaggio ruotato questo potrebbe significare che il tuo personaggio è considerato come in una regione in cui lui / lei non è realmente.

L'AABB-albero si presta a questo con facilità dato che ogni volta che si passa il test si va più in profondità l'albero e più in dettaglio.

È possibile utilizzare un rettangolo di selezione Oriented (OBB) quando si ha bisogno incroci davvero accurati. Può essere implementato con la separazione asse teorema . Vedo oz-scontrano ha il supporto per OBBs già.

Ci sono un sacco di risorse su OBBs, questo mi ha aiutato: GPWiki sulla separazione asse teorema

Ecco un implementazione .

È possibile calcolare un AABB da un OBB se è necessario.

Altri suggerimenti

OZCollide lavora per entità mobili ed è indipendente dal tempo (basta dare un vettore velocità). Si lavora anche per OBB (non solo AABB).

Controllare la documentazione in linea: http://www.tsarevitch.org/ozcollide/docs/ link non funzionante

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top