AABB - AABB Collision, tôi đánh vào mặt nào?


7

Để cho phép các đối tượng của tôi trượt khi chúng va chạm, tôi cần:

  • Biết mặt nào của AABB mà chúng va chạm.
  • Tính bình thường cho khuôn mặt đó.
  • Trả lại bình thường và tính xung lực áp dụng cho vận tốc của người chơi.

Câu hỏi

Làm cách nào tôi có thể tính được khuôn mặt nào của AABB mà tôi đã va chạm, khi biết rằng tôi có hai AABB đang va chạm? Một người là người chơi và người kia là một đối tượng thế giới.

Đây là những gì trông giống như (sự cố va chạm trong vòng tròn màu trắng):

sự cố va chạm

Cảm ơn sự giúp đỡ của bạn.

Câu trả lời:


2

Kiểm tra từng mặt phẳng riêng lẻ của AABB so với AABB khác. Nếu một mặt phẳng cắt AABB của đối tượng khác, nhưng mặt phẳng đối diện của nó thì không, bạn biết rằng mặt phẳng đó có liên quan đến vụ va chạm. Nếu cả hai mặt đối diện giao nhau với AABB khác, thì đối tượng hoàn toàn nằm trong trục kia dọc theo trục đó và hướng va chạm không rõ ràng / không xác định.

Nói một cách thực tế, đây là những kiểm tra tương tự được sử dụng để xác định xem AABB có va chạm hay không, vì vậy bạn sẽ có thể xác định khuôn mặt nào va chạm khi bạn thực hiện kiểm tra va chạm AABB với ít chi phí bổ sung.

Nhìn vào ví dụ, chúng ta thấy rằng:

  • Mặt phẳng yz + của mặt cầu giao nhau với lăng kính, nhưng yz- thì không. Hình cầu yz + va chạm. Theo cách tương tự, các lăng kính của va chạm.
  • Cả lăng kính xy- và xy + đều nằm trong hình cầu xy- và xy +. Lăng kính hoàn toàn nằm trong phạm vi hình cầu theo hướng z; va chạm là mơ hồ.
  • Cả lăng kính xz- và xz + đều nằm trong hình cầu xz- và xy +. Lăng kính hoàn toàn nằm trong phạm vi theo hướng y; va chạm là mơ hồ.

Vì vậy, trong ví dụ này, chúng tôi phát hiện sự va chạm giữa hình cầu yz + và lăng kính yz-.

Các quy tắc của tất cả các khuôn mặt phải rõ ràng (yz + có (1,0,0), yz- has (-1,0,0), xz- has (0, -1,0) ...) Nói chung, nếu một hình tứ giác có các đỉnh (a, b, c, d) theo thứ tự ngược chiều kim đồng hồ, sau đó bạn có thể tính toán bình thường với (ba) .cross (cb)

Lưu ý rằng vấn đề này không có khả năng xảy ra nhiều va chạm: tùy thuộc vào vị trí, bạn có thể có va chạm ở cả ba trục. Tôi nghĩ rằng 'sự mơ hồ' này là khá cố hữu, và cách bạn giải quyết nó thực sự tùy thuộc vào bạn. Bạn chỉ có thể lấy trung bình của các quy tắc cá nhân. Bạn có thể tìm thấy diện tích giao nhau trong mỗi mặt phẳng, sau đó chọn mức bình thường tương ứng với diện tích lớn nhất hoặc sử dụng các khu vực để tính trọng số trung bình của quy tắc. Bạn có thể tìm thấy độ sâu xâm nhập dọc theo mỗi trục và chọn mức bình thường tương ứng với sự xâm nhập nông nhất (hoặc sâu nhất). Vân vân.


Điều đó có dễ hơn không? Cảm ơn ipeet - một ngày dài nữa, nhiều tuần để tôi thử mã hóa nó ..
PeeS

@PeeS - Tôi cảm thấy như đây có lẽ là điều đã được thực hiện nhiều lần. Có lẽ bạn nên nhìn xung quanh để biết những người khác đã thực hiện nó như thế nào.
Richard Marskell - Drackir
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.