Làm thế nào để thực hiện phát hiện va chạm trên các vật thể được tạo thành từ nhiều hình tam giác nhỏ?


13

Tôi hiểu rằng bất kỳ hình dạng có thể được tạo ra (hoặc gần đúng) bởi các hình tam giác nhỏ hơn. Bất kỳ hình chữ nhật có thể được tạo bởi 2 hình tam giác nhỏ hơn. Bất kỳ vòng tròn có thể được tạo ra bởi nhiều hình tam giác "pizza lát" mỏng. Làm thế nào để dịch này để phát hiện va chạm?

Tôi hiểu làm thế nào để tính toán chồng chéo hình chữ nhật bằng cách sử dụng các đỉnh. Tôi hiểu làm thế nào để tính toán chồng chéo vòng tròn bằng cách sử dụng tâm, bán kính và khoảng cách.

Nhưng, làm thế nào để phát hiện va chạm trên các hình dạng được tạo thành từ các hình tam giác nhỏ? Không cụ thể, nhưng chỉ là khái niệm chung ....

Câu trả lời:


26

Nhưng, làm thế nào để phát hiện va chạm trên các hình dạng được tạo thành từ các hình tam giác nhỏ?

Bằng cách không làm điều đó.

Phát hiện va chạm với bộ sưu tập tam giác tùy ý (hoặc tệ hơn, giữa hai bộ sưu tập tam giác tùy ý) rất tốn kém.

Thay vào đó, chúng tôi thường thực hiện phát hiện bộ sưu tập theo kiểu phân cấp, bắt đầu trước tiên với các hình dạng cực kỳ thô sơ, đơn giản (như hộp hoặc hình cầu) gần đúng (kém) đối tượng bên dưới.

Điều này cho phép chúng tôi nhanh chóng từ chối phần lớn các va chạm tiềm năng là "không xảy ra", đó là trường hợp thông thường. Trong trường hợp kiểm tra thô như vậy vượt qua, điều đó cho thấy có sự va chạm thực tế tiềm ẩn và chúng tôi tiến hành kiểm tra dựa trên sự gần đúng chi tiết hơn về hình dạng bên dưới (chẳng hạn như một hình dạng được tạo thành từ nhiều hình dạng viên nang được gắn chặt hoặc nhiều hộp giới hạn liên kết).

Về cơ bản, phát hiện va chạm bắt đầu bằng các thử nghiệm thô và, khi các thử nghiệm đó vượt qua, tiếp tục đại diện ngày càng chi tiết hơn. Hình ảnh này, được cung cấp bởi Shiro trong một bình luận cho câu trả lời của Alexandre , minh họa cách một mô hình phức tạp (một con người) có thể được thể hiện bằng một loạt các hình dạng đơn giản hơn:

hitboxes

Hiếm khi chúng ta thực sự cần phải thực hiện va chạm ở cấp độ tam giác riêng lẻ và khi chúng ta thường sử dụng các phương pháp máy nghiền để đi sâu vào một tập hợp các tam giác tiềm năng rất nhỏ để kiểm tra. Tại thời điểm đó, các thuật toán cụ thể được sử dụng để thực hiện các thử nghiệm, giống như bạn sẽ kiểm tra nếu hai hình chữ nhật trùng nhau. Ví dụ, bạn có thể xác định xem và nơi một tia chạm vào một tam giác .


Cảm ơn. Vâng, nếu tôi thực sự làm một trò chơi, tôi sẽ chỉ sử dụng một số công cụ hiện có. Nhưng, tôi chỉ muốn hiểu những ý tưởng cơ bản được thực hiện trong một công cụ phát hiện va chạm được tạo sẵn. Trong sơ đồ của bạn ở trên, bạn sẽ sử dụng toán hình chữ nhật để xem liệu có gì chạm vào BẤT K of hàng tá hình chữ nhật tạo nên người đàn ông không. Đó có phải là ý tưởng cơ bản?
JackOf ALL

Đó là các hộp giới hạn định hướng (3D) không phải hình chữ nhật. Nhưng có. Nếu tôi định kiểm tra xem một tia (đại diện, giả sử, một viên đạn) đã va chạm với người chơi thì tôi sẽ kiểm tra tia đó với các hộp đó - có thể sau lần thử nghiệm đầu tiên với một hộp khổng lồ đại diện cho toàn bộ nhân vật - không phải chống lại mọi tam giác của lưới render).

Ý tưởng là bạn có thể sử dụng một xấp xỉ thô của ký tự, chẳng hạn như các hộp giới hạn định hướng được hiển thị trong hình trên, và kiểm tra rằng trước tiên để thực hiện một thử nghiệm nhấn ít tốn kém hơn, và nếu có va chạm thì hãy đi sâu xuống mức thấp hơn NẾU CẦN THIẾT, kiểm tra các tam giác riêng lẻ chứa trong hộp giới hạn. Thông thường, có thể có một số BV khác nhau được sử dụng theo cấp bậc, với cái bên ngoài kém chính xác hơn nhưng nhanh nhất để kiểm tra (hình cầu, hộp giới hạn) và đi sâu vào thứ gì đó cụ thể hơn (k-DOP) và có khả năng khoan sâu hơn nữa (hình tam giác )
Kik

4

Việc phát hiện va chạm dựa trên hình học (nguyên thủy như đường thẳng, mặt phẳng, hình cầu, hộp, viên nang, hình trụ).

Nếu bạn cần thực hiện phát hiện va chạm trên các hình được tạo từ hình tam giác, ví dụ địa hình không bằng phẳng, bạn phải kiểm tra tất cả các hình tam giác tạo thành lưới.

Nếu bạn đi đến điểm đó, tôi sẽ khuyên bạn nên sử dụng một công cụ phát hiện va chạm được chế tạo sẵn, vì loại công cụ này trở nên khá phức tạp, khá nhanh.


Làm thế nào để bạn phát hiện va chạm trên hình dạng tạo thành hình tam giác?
JackOf ALL

@JackOfTất cả anh ấy đã đề cập rằng trong câu trả lời của mình, đó là bằng cách sử dụng các hình dạng hình học thường là i.stack.imgur.com/CAHxn.jpg
dimitris93

@JackOfTất cả tôi đã chỉnh sửa câu trả lời của mình; và như Shiro nói, nếu bạn có những "vật phẩm" phức tạp hơn trong môi trường của mình (thân, ghế, ô tô, v.v.), trong quá trình phát triển trò chơi, chúng thường được tạo ra từ những nguyên thủy đơn giản hơn gắn liền với nhau. Việc phát hiện các va chạm được thực hiện trên các hình dạng nguyên thủy, nhưng mô phỏng vật lý sau đó được thực hiện trên toàn bộ cơ thể.
Vaillancourt

4
Tôi thực sự không cố gắng tạo ra một trò chơi, tôi chỉ muốn hiểu những ý tưởng cơ bản được thực hiện trong một công cụ phát hiện va chạm được tạo sẵn. Nếu tôi thực sự làm một trò chơi, tôi rõ ràng sẽ không phát minh lại cái bánh xe, đồng ý.
JackOf ALL
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.