Cách tốt nhất / hiệu quả để thực hiện Va chạm 3d


16

Tôi đã lập trình một hệ thống va chạm dựa trên 2d cho một trò chơi trước đó. Đó là hệ thống va chạm đầu tiên của tôi và nó thật xấu xí. Tôi đã tìm kiếm sự va chạm giữa các đối tượng bằng cách kiểm tra tất cả các đối tượng với tất cả các đối tượng. Tôi đã nghe nói về một hệ thống lưới với các ô trong đó một đối tượng sẽ chỉ nhìn xung đột với các đối tượng khác từ (các) ô hiện tại của nó. Có thực sự là một cách tốt để kiểm tra va chạm?

Tôi muốn có một kỹ thuật tốt để lặp lại tất cả các mục của tôi trong thế giới 3d.

Câu trả lời:


11

Bạn sẽ cần một thuật toán phân vùng không gian tốt, thường được sử dụng trong 3D là các quãng tám .

Sau đó, bạn có thể bao quanh các mô hình, v.v ... với các quả cầu giới hạn trong đó chúng khớp với nhau một cách gọn gàng vì sự va chạm giữa các quả cầu giới hạn rất dễ tính toán. Sau khi bạn biết rằng hai quả cầu giới hạn va chạm với nhau, bạn có thể lặp đi lặp lại làm cho các quả cầu giới hạn nhỏ hơn và thêm các quả cầu giới hạn để giữ cho vật thể được bao phủ trong chúng, hoặc chúng ta sử dụng một thuật toán thông minh khác để tính toán va chạm giữa hai vật thể phức tạp.

Xem hình ảnh này: nhiều quả cầu giới hạn


12

Cuối cùng, tôi nghĩ rằng câu trả lời cho câu hỏi của bạn sẽ phụ thuộc vào nhu cầu của ứng dụng cụ thể của bạn, vì không có giải pháp nào phù hợp cho tất cả mọi người. Mặc dù có một số tài nguyên phong phú trên web, nhưng bạn sẽ tiết kiệm cho mình rất nhiều thời gian và sự thất vọng bằng cách chọn Phát hiện va chạm trong thời gian thực của Christer Ericson , ví dụ rất chi tiết về nhiều kỹ thuật và thuật toán Mã C ++.

Nó giúp tôi thực hiện các bước bé trước khi nhảy vào cố gắng xây dựng một hệ thống lớn. Viết một hàm để xác định xem một điểm có nằm trong mặt phẳng không, nếu một điểm nằm trong một tam giác, nếu một tia nằm trong một tam giác, v.v. Sau đó chuyển sang các phép thử tĩnh của các vật rắn lồi khác nhau: AABB so với Tam giác, v.v. thời gian những thứ dường như không thể xuyên thủng (tha thứ cho trò chơi chữ) lúc đầu trở nên ít đáng ngại hơn. Dưới đây là danh sách một số lượng tốt các bài kiểm tra, với mã ví dụ:

http://www.realtimerendering.com/intersections.html

Trong khi đó, vì tôi biết không phải ai cũng có thể bỏ ra 70-80 đô la cho một cuốn sách theo ý muốn, đây là một số thuật ngữ bạn có thể muốn xem xét:

  • Phân vùng không gian, Octrees, Quadtrees, cây BSP
  • Cây BIH
  • Khối lượng giới hạn và phân cấp khối lượng giới hạn
  • Phát hiện va chạm rời rạc và liên tục
  • Định lý trục tách
  • Thuật toán GJK
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.