Algoritmo di collisione AABB con una condizione

0

Quindi sto facendo un'implementazione 3D del rilevamento delle collisioni.

Considerando

  1. Le scatole sono orientate sull'asse.
  2. Sono girevoli ma devono essere orientati sull'asse.
  3. Il riquadro A e il riquadro B non possono attraversarsi l'un l'altro. Però; uno di questi lati può avere punti simili (x, y, z).

Ecco un aiuto visivo di cosa DOVREBBE accadere.

COLLIDING (Esempi in RED BOX) ------------------- NON COLLIDING (Esempi in GREEN BOX)

Tuttavia, l'esempio 1 e l'esempio 3 nella casella VERDE sono considerati come collisione quando non lo voglio. Voglio che siano considerati non in collisione.

Ecco il mio codice finora.

if((xMax1>=xMin2)||(xMin1<=xMin2)){
            if((yMax1>=yMin2)||(yMin1<=yMin2)){
                        if((zMax1>=zMin2)||(zMin1<=zMin2)){
                            isSeperate = false;
                        }
                    }
                }

Che cos'è un condizionale che dovrei aggiungere al codice per risolvere il mio problema.

    
posta AMDee 10.07.2015 - 14:47
fonte

2 risposte

1

Sembra che tu non voglia >= e <= , perché quindi le caselle che toccano sono considerate in collisione. Utilizza > e < invece.

    
risposta data 10.07.2015 - 16:35
fonte
0

Ci sono tanti casi diversi da considerare quando si sviluppa il rilevamento delle collisioni che può creare confusione. Consiglierei di implementare il Teorema dell'asse di separazione (SAT) per rilevare le collisioni tra oggetti convessi. Prende in considerazione la posizione e la rotazione degli oggetti e consente di gestire le collisioni. Puoi dare un'occhiata a questo video che ho realizzato alcuni mesi fa della mia implementazione in C # per forme 2D: link

Questo funzionerà anche per le forme 3D, ma ha solo bisogno di prendere in considerazione l'asse z.

    
risposta data 10.07.2015 - 15:32
fonte

Leggi altre domande sui tag