Làm thế nào để thực hiện phát hiện va chạm trong không gian 3D?


8

Tôi đã phải viết, những gì có thể tóm tắt là, một trò chơi 3D hoàn chỉnh từ đầu học kỳ này. Cho đến bây giờ tôi chỉ lập trình các trò chơi 2D trong thời gian rảnh rỗi, quá trình chuyển đổi không có vẻ khó khăn, trò chơi đơn giản. Vấn đề duy nhất tôi có là phát hiện va chạm. Điều duy nhất tôi có thể tìm thấy là AABB, giới hạn hình cầu hoặc khuyến nghị của các động cơ vật lý khác nhau. Tôi phải lập trình một chiếc tàu ngầm sẽ di chuyển tự do bên trong hệ thống hang động, AFAIK Tôi không thể sử dụng các thư viện vật lý, vì vậy không có cách nào ở trên giải quyết được vấn đề của tôi.

Cho đến bây giờ tôi đang sử dụng SAT để phát hiện va chạm. Có bất kỳ thuật toán tương tự, tuyệt vời nào, nhưng được tạo ra để va chạm 3D không? Tôi không nói về quãng tám hoặc tối ưu hóa khác, tôi đang nói về phát hiện va chạm trực tiếp của một bộ đa giác 3D với một bộ đa giác 3D khác. Tôi đã nghĩ về việc sử dụng SAT hai lần, chiếu lưới từ đỉnh và mặt bên, nhưng sau đó dường như rất khó để phân chia không gian 3D thành các hình lồi. Ngoài ra, có vẻ như quá nhiều tính toán ngay cả với octrees.

Làm thế nào để các chuyên gia làm điều đó? Ai đó có thể làm sáng tỏ một số.


1
Không quá khó để phân chia không gian 3D thành hình học lồi. Ví dụ: sử dụng Cây-Cây (phân vùng không gian nhị phân).
Maik

Câu trả lời:


5

GJK hoạt động trên các hình dạng lồi, tôi có thể sử dụng SAT. Tôi đã tìm thấy thông tin tôi muốn rồi. Dưới đây là một số ví dụ:

Để tóm tắt, tôi sẽ thực hiện kiểm tra va chạm của một hình cầu hoặc một elipsoid chống lại nhiều hình tam giác tạo thành một lưới va chạm. Đó dường như là cách nó được thực hiện và đó là thông tin tôi đã yêu cầu, trừ khi ai đó có thể cho tôi biết khác nhau.


1

Này, tôi đã viết về GJK bằng 3D ở đây. SAT chậm hơn GJK http://in2gpu.com/2014/05/18/gjk-alacticm-3d/


Các câu trả lời chỉ liên kết có xu hướng khá kém, vì chúng trở nên không hợp lệ ngay khi di chuyển và chúng không tìm kiếm tốt. Xem xét mở rộng câu trả lời này để bao gồm một số thông tin về các chi tiết của giải pháp bạn đang cố gắng trình bày.

oh, ok tôi nghĩ nó ổn
Sergiu Craitoiu

0

Chà, nếu đó không phải là thứ gì đó rất đòi hỏi và hiện đại, bạn có thể bắt đầu bằng cách thực hiện thuật toán phát hiện va chạm Gilbert . Nó có thể được thực hiện khá nhanh và sẽ nhanh, với điều kiện hình học va chạm của bạn không quá chi tiết (và không cần thiết!). Đó là cách mà ngay cả một số giả lập thực hiện mánh khóe .. bất cứ điều gì phức tạp hơn, có lẽ, sẽ phải nỗ lực nhiều hơn để xem xét.

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.