Hộp giới hạn trong octrees


9

Tôi đã thấy rằng quãng tám thường được sử dụng cho những việc như loại bỏ bực bội và phát hiện va chạm trong 3D. Nhưng tôi chỉ không chắc làm thế nào các thuật toán hoạt động. Chắc chắn toàn bộ nguyên tắc của quãng tám bị phá vỡ khi bạn cố gắng sử dụng các hộp giới hạn, bởi vì bất kỳ hộp đã cho nào cũng có thể được lưu trữ trong một nút nhưng thực sự chồng lấp không gian được đại diện bởi một nút khác. Ngoài ra, tôi không chắc làm thế nào điều này có thể hoạt động để tìm kiếm các hộp giới hạn thay vì các điểm, bởi vì một lần nữa, bạn có thể bị mắc kẹt khi nhìn vào hầu như tất cả các nút, đánh bại mục đích.

Vậy làm thế nào trên trái đất để octrees đối phó với các hộp giới hạn?

Câu trả lời:


12

Một Octree (3D) sử dụng các khái niệm tương tự như Quadtree (2D). Nếu bạn đọc và hiểu bài viết trên wikipedia về Quadtrees, bạn sẽ có thể áp dụng các khái niệm tương tự vào 3D.

Cả hai cây này đều cho phép bạn sử dụng các tra cứu dựa trên khu vực có thể làm giảm đáng kể số lượng so sánh cần thiết để tìm ra những vật thể trong một khu vực nhất định. Điều này có thể hữu ích cho việc loại bỏ thị giác, hoặc thậm chí cho các va chạm, tùy thuộc vào trò chơi của bạn.

Khái niệm cơ bản là không gian thế giới được chia thành "xô": hình vuông cho 2D hoặc hình khối cho 3D. Với một thế giới trống rỗng, bạn bắt đầu với một thùng hình vuông hoặc hình khối duy nhất bao phủ toàn bộ thế giới. Khi bạn thêm các đối tượng vào thế giới, bạn bắt đầu tại nút gốc và tìm đường vào cây dựa trên vị trí và kích thước của đối tượng. Nếu xô đích đạt đến công suất, bạn chia nhỏ nó bằng cách chia các ô vuông thành 4 ô vuông nhỏ hơn (Quadtree) hoặc chia các khối thành 8 khối nhỏ hơn (Octree). Mỗi đối tượng bạn thêm vào thế giới chỉ được chèn sâu vào trong cây vì nó có thể nằm hoàn toàn trong giới hạn của thùng. Nếu một đối tượng không vừa trong giới hạn của nhóm hiện tại, bạn phải di chuyển đối tượng sang nhóm cha mẹ nhỏ nhất mà nó hoàn toàn vừa với bên trong.

Lưu ý rằng việc sử dụng Quadtree hoặc Octree là quá mức cần thiết nếu bạn không có nhiều đối tượng trong thế giới của mình. Ngoài ra còn có các giải pháp nguồn mở cho cả hai.


Tôi nghĩ rằng anh ấy biết điều đó. Tôi tin rằng sự nhầm lẫn là về cách xử lý âm lượng không phù hợp với phân khu.
ClassicThunder

2
Tôi đề cập rằng "Nếu một đối tượng không nằm gọn trong giới hạn, thì nó phải được lưu trữ một lớp lên". Và nó cũng có vẻ như OP có một chút bối rối về cách thức hoạt động của Octrees nói chung, dựa trên câu thứ hai của anh ấy.
John McDonald

Điều đó không vi phạm các ràng buộc cơ bản của octrees, rằng chỉ có bảy hoặc ít hơn trong mỗi nút?
DeadMG

Ý tôi là, nếu tôi có N đối tượng nằm dọc theo ranh giới, thì tôi sẽ xem xét các kiểm tra O (N) để kiểm tra từng đối tượng.
DeadMG

@DeadMG, "Oct" như trong Eight (Octagon, Octane, v.v.). Khi nút gốc tách ra, nó sẽ có 8 con: North East Up, North East Down, NWU, NWD, SEU, SED, SWU & SWD với tổng số 9 nút bao gồm. gốc. Nếu một trong các nút con này tách ra, nút đó cũng sẽ có 8 nút phụ, một nút cho mỗi góc phần tư như trước, tạo tổng cộng 8 + 8 + 1 = 17 nút. Nếu tất cả các đối tượng của bạn phù hợp ngay trên ranh giới của nút gốc và không khớp với bất kỳ trong số 8 góc phần tư, vâng, đó sẽ là O (N) và bạn sẽ phải kiểm tra đối với mọi đối tượng và bạn sẽ không thể lưu bất kỳ so sánh, trong thực tế nó sẽ thăm dò chi phí.
John McDonald

3

n-cây nổi tiếng nhất nhưng không phải là hệ thống phân vùng không gian duy nhất có sẵn. Có rất nhiều, rất nhiều người khác. Một chút thông tin về dữ liệu bạn có sẽ đi một chặng đường dài để tìm kiếm sự lựa chọn tốt nhất. Hộp của bạn thay đổi kích thước, hoặc di chuyển xung quanh? Chúng lớn cỡ nào? Có bao nhiêu cái Bạn có rất nhiều chèn / xóa?

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.