回答:
AABBの各平面を他のAABBと比較してください。平面が他のオブジェクトのAABBと交差するが、反対側の平面は交差しない場合、その平面が衝突に関与していることがわかります。対向する両方の面が他のAABBと交差する場合、オブジェクトはその軸に沿って他の面内に完全にあり、衝突の方向は不明確/未定義です。
実際には、これらはAABBが衝突するかどうかを決定するために使用されるチェックと同じです。したがって、追加のコストをほとんどかけずに、AABB衝突チェックを実行するときにどの面が衝突するかを決定できるはずです。
例を見ると、次のことがわかります。
したがって、この例では、球体yz +とプリズムyz-の間の衝突を検出します。
すべての面の法線は明白である必要があります(yz +は(1,0,0)、yz-は(-1,0,0)、xz-は(0、-1,0)...)クワッドには、反時計回りの順序で頂点(a、b、c、d)があり、(ba).cross(cb)で法線を計算できます
この問題は、複数の衝突が発生する可能性があることに注意してください。配置によっては、3つの軸すべてに衝突が発生する可能性があります。この「あいまいさ」はかなり固有のものであり、どのようにそれを解決するかは本当にあなた次第です。個々の法線の平均を取るだけかもしれません。各平面で交差する領域を見つけ、最大の領域に対応する法線を選択するか、領域を使用して法線の平均に重みを付けることができます。各軸に沿って侵入深度を見つけ、最も浅い(または最も深い)侵入に対応する法線を選択できます。等