Frustum Culling với VBO


8

Tôi có địa hình được hiển thị trong dự án của mình bằng VBO trong OpenGL. Tôi muốn áp dụng một số Frustum Culling nhưng không biết làm thế nào để truy cập từng đa giác như được vẽ để kiểm tra xem nó có trong tầm nhìn hay không. Tôi nghĩ rằng đây là nơi mà octrees phát huy tác dụng nhưng tôi không biết làm thế nào điều này thực sự được thực hiện. Có ai biết một hướng dẫn tốt về cách làm điều cụ thể này hoặc có một số mã giả cho tôi không?

Cảm ơn trong nâng cao!

Câu trả lời:


3

Thông tin thêm về cách bạn lưu trữ dữ liệu địa hình sẽ hữu ích ở đây. Bạn đang lưu trữ nó chunk? Bạn liên tục xây dựng lại VBO? Có phải tất cả các địa hình trong một VBO và bạn đang hiển thị các phần của nó tại một thời điểm?

Cố gắng loại bỏ mỗi đa giác có thể sẽ giới thiệu nhiều chi phí hơn là tiết kiệm. Một khối địa hình lớn hơn mà bạn có thể kiểm tra cùng một lúc, việc loại bỏ sẽ càng nhanh, với sự đánh đổi chính xác rõ ràng. Cuối cùng, bạn sẽ cần thực hiện một số hồ sơ để tìm ra điểm tối ưu của sự đánh đổi đó là gì, vì vậy việc tạo ra một hệ thống cho phép bạn thay đổi linh hoạt cách địa hình của bạn bị phá vỡ sẽ rất hữu ích.


1

GPU đã có thể loại bỏ các đa giác trên cơ sở mỗi đa giác, nhưng điều này xảy ra vào thời gian rasterization / thiết lập xảy ra sau khi đổ bóng đỉnh (sử dụng các bóng đổ Vertex / Geometry / Hull / Domain). Điều này có nghĩa là GPU vẫn có thể kết thúc các đỉnh đa giác sẽ bị loại bỏ. Nếu điều này xảy ra, GPU sẽ không làm được gì nhiều và do đó sẽ lãng phí chu kỳ GPU.

Vì lý do này, chúng tôi cố gắng không lãng phí chu kỳ GPU bằng cách loại bỏ hình học vô hình ở phía CPU (hoặc phía GPU sử dụng các tính năng DX10 + như DrawInirect và / hoặc kết xuất theo quy định) trong các lô đa giác bằng cách đơn giản là không gọi vẽ cho các lô đó.

Thông thường, lô đa giác đó có thể được biểu thị bằng một hình cầu hoặc hộp bao quanh tất cả các đa giác đó. Hình cầu / hộp giới hạn này sau đó được kiểm tra chống lại sự thất vọng và nếu nó chạm vào sự thất vọng đó, lệnh gọi rút thăm được gọi cho các đa giác đó. Nếu không, cuộc gọi rút thăm được bỏ qua. Một octree chỉ đơn giản là một cách khác để xác định lô hình học nào có thể nhìn thấy, ngoại trừ nó tổ chức dữ liệu đó theo kiểu phân cấp. Octrees không nhất thiết phải phù hợp với tất cả các hình học.

Một số tài liệu tham khảo khá tốt giải thích kỹ thuật hình cầu / bực bội theo sau:

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.