Quad Tree với rất nhiều đối tượng chuyển động


7

Tôi có một triển khai Quad Tree rất hữu ích cho những gì tôi đang cố gắng thực hiện. Vấn đề của tôi là khi chế độ xem của tôi có nhiều đối tượng, Cập nhật cho Quad Tree mất một thời gian rất dài.

Một thực tế đã biết rằng Quad Tree chậm đối với các đối tượng không tĩnh. Tôi đã thử một vài phương pháp để cố gắng tăng tốc mọi thứ, nhưng thực tế là, tôi cần cập nhật một số lượng lớn các đối tượng rất thường xuyên.

Có một thuật toán tốt hơn tôi nên xem xét thay thế? Có một số triển khai Quad Tree có nguồn gốc mà bạn biết về nó có thể hữu ích cho tôi không?


Bạn cũng có thể xem tại đây: gamedev.stackexchange.com/questions/20011/ trên
zacharmarz

Câu trả lời:


13

Làm thế nào bạn di chuyển các đối tượng Quad Tree? Phương pháp đơn giản nhất (và chậm nhất) là loại bỏ đối tượng và chèn lại nó. XNA Quad Tree mã nguồn mở mà tôi và một người bạn đã thực hiện có một chút logic khi một đối tượng di chuyển:

If the object is still inside the same quad
    if the object fits into a child quad
        Add to child
Else
    move the object to the parent(s) until it fits, and optionally going back down into children

Nếu bạn đã làm một cái gì đó như thế, có thể đáng để xem xét các phương pháp chỉ mục không gian khác như Băm không gian .


Wow, điều này thật kỳ lạ. Tôi tình cờ thấy việc thực hiện này chỉ một lúc trước khi bạn đăng nó. Tôi mới bắt đầu thực hiện phiên bản này để xem liệu nó có tăng tốc mọi thứ cho tôi không, và nó thì có. Đây là công việc tuyệt vời.
jgallant

1
@Jon, Yay, tôi rất vui vì tôi có thể giúp đỡ. BTW, Có một lỗi nhỏ xảy ra khi di chuyển trong DLL trên đó (r20), tôi sẽ tải xuống nguồn (r22).
John McDonald

Oh tôi đã tải rev22 của nguồn. Tôi thậm chí không bận tâm đến DLL. Nhưng cảm ơn đã chỉ ra rằng.
jgallant

Chết tiệt, tôi đang cập nhật một lượng dữ liệu khổng lồ trên mỗi cuộc gọi Update () và nó hoàn toàn không bị sa lầy. Bạn là người đàn ông.
jgallant

Tuyệt vời, cho tôi biết nếu bạn gặp bất kỳ vấn đề với nó.
John McDonald

3

Tôi sử dụng giới hạn cho các đối tượng và chèn chúng vào hình tứ giác sâu nhất chứa chúng. (Tôi chưa bao giờ thấy thoải mái khi coi mọi thứ là điểm)

Đối với các vật thể chuyển động nhanh, thường nhỏ như đạn, tôi tính các giới hạn của đường đi của chúng cho một số dấu thời gian hoặc kích thước tối đa, vì vậy tôi đã gắn một viên đạn bằng một hình chữ nhật lớn hơn thay vì hình vuông nhỏ hơn và không cần phải di chuyển chúng gần như thường xuyên.

Ngoài ra, bạn có thể tối ưu hóa chính mã di chuyển để di chuyển đối tượng một cách thông minh hơn là loại bỏ nó và tái xác nhận nó.

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.