2011-07-06 26 views
10

Tôi đang vẽ một số mắt lưới (đôi khi lên trên 500) và tôi muốn biết cách tốt nhất để tiếp cận điều này. Nó sẽ là vô nghĩa để tạo ra 500 VBO và sau đó nếu họ vượt qua các thử nghiệm thất vọng và tầm nhìn, làm cho họ. Có cách nào hiệu quả hơn để thực hiện việc này không? Tôi đang tìm cách tối đa hóa hiệu suất.OpenGL - Sẽ sử dụng nhiều kết xuất chậm của VBO?

Trả lời

11

Để trả lời câu hỏi của bạn, có, nhiều VBO sẽ làm chậm mọi thứ. Nhiều polys hơn thường sẽ làm chậm quá trình render, nhưng nhiều cuộc gọi vẽ hơn lại có một hit lớn hơn nhiều. Bạn muốn giảm thiểu các thay đổi trạng thái và bản vẽ, cũng như số lượng bộ đệm bạn có (và sử dụng bộ nhớ).

Tôi khuyên bạn nên xem bộ đệm đầu tiên và tìm ra số lượng bạn cần. Nếu bạn có thể tạo mẫu hình/mẫu, kết hợp hình học tĩnh thành một bộ đệm đơn, sử dụng lại bộ đệm hiệu quả hơn, v.v.

Khi bạn đã cắt giảm bộ đệm xuống mức tối thiểu có thể, bạn sẽ muốn sử dụng nhiều loại . Khả năng hiển thị, cả hai bởi sự thất vọng (có lẽ trong một octree) và tắc, có thể cung cấp một tăng hiệu suất đáng kể. Ý tưởng chính là loại bỏ hình học nhanh và đơn giản nhất có thể, vì vậy bạn bắt đầu với các thử nghiệm thô (octree), sau đó chi tiết hơn một chút (có lẽ là AABB và/hoặc đơn giản), sau đó tắc, sau đó thực sự vẽ.

Đây là một số good article on frustrum culling, chạm một chút trên quadtrees (và theo phần mở rộng, octrees). Sơ đồ, giải thích và một số mã mẫu.

Bài viết trích xuất bài hát OpenGL dường như ít phổ biến hơn, mặc dù this one from GPU Gems có thể là một nơi bắt đầu tốt.

+1

Cảm ơn bạn đã trả lời. Tôi bực mình bằng cách sử dụng một cây nhị phân và nó hoạt động tốt. Tôi chỉ quan tâm hơn đến thực tế là có 500 bộ đệm sẽ đánh bại toàn bộ bản chất của tăng tốc độ kết hợp với VBO. –

+1

Chỉ cần bạn không hiểu sai: Sử dụng một số VBO _in general_ là thuận lợi (một vài chục tại một thời điểm), bởi vì nó cho phép GPU vẽ từ một trong khi tải lên khác và di chuyển dữ liệu giữa bộ nhớ GPU và bộ nhớ chính (mà trình điều khiển đôi khi phải làm) cũng sẽ hiệu quả hơn, vì sẽ cập nhật dữ liệu. Chỉ cần, như peachykeen chỉ ra, có hàng trăm người trong số họ có nghĩa là thay đổi nhà nước nhiều trăm lần, mà cuối cùng là bất lợi. – Damon

+2

Vâng, VBO là tốt (bạn không bao giờ nên gửi hình học trên mỗi khung nếu có cách nào để tránh nó), nhưng có quá nhiều bộ đệm có thể gây ra lỗi bộ nhớ và làm tổn thương hiệu suất khá đáng kể. Tôi không chắc chắn nếu 500 là * quá nhiều *, nhưng nó đẩy đủ để bạn có thể nhìn vào cắt nó xuống. – ssube

Các vấn đề liên quan