Kiểm tra trục tách. (Còn được gọi là định lý trục tách, kiểm tra định lý trục tách, yada yada.)
Nếu bạn có thể tìm thấy một trục (bất kỳ trục nào), không chỉ các vectơ cơ sở XYZ thông thường) trong đó các hình chiếu của hai hình khối của bạn không trùng nhau, thì chúng không giao nhau.
Có rất nhiều hướng dẫn và triển khai có sẵn thông qua Google, nhưng bài này có các biểu đồ đẹp:
https://gamedevelopment.tutsplus.com/tutorials/collision-detection-USE-the-separating-axis-theorem--gamedev-169
Đây là những gì chúng tôi dạy sinh viên dev grad trò chơi của chúng tôi và tất cả họ đều có việc làm. :)
Ngoài ra, kiểm tra các giao điểm của các đỉnh và các mặt hoặc các cạnh không bao gồm trường hợp các hình khối được lồng vào nhau, vì vậy đó không phải là một giải pháp thực sự. SAT có vẻ phức tạp trong 3D, nhưng nó chỉ là sự lặp lại. Cắt, dán, theo dõi và thử một số trường hợp cạnh và bạn sẽ nhận được nó.
Một phương pháp đơn giản, đủ tốt để phát hiện va chạm ở pha rộng là coi các khối như hình cầu. (Nếu chúng thực sự là các hình khối thông thường, thì sai số là rất nhỏ, mặc dù tỷ lệ thuận với tỷ lệ của các hình khối so với nhau.)
Lấy khoảng cách giữa tâm của các hình khối và xem nó có lớn hơn tổng của một nửa đường chéo của hai hình khối không. (Về cơ bản, bạn đang kiểm tra các quả cầu giới hạn thay vì lo lắng về siêu phẳng.)