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
Để 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. OpenGL VBO trong Haskell
- 2. OpenGL ES 2.0 và các đối tượng đệm đỉnh (VBO)
- 3. Sự cố khi sử dụng VBO
- 4. Sử dụng đối tượng đệm Vertex (VBO) trong OpenGL es (Iphone) để cải thiện hiệu suất
- 5. OpenGL hiện đại: VBO, GLM và Ma trận Stacks
- 6. Tôi sử dụng bao nhiêu VBO?
- 7. Sự cố khi sử dụng VBO để hiển thị các đỉnh - OpenGL
- 8. OpenGL xử lý nhiều đối tượng
- 9. Vẽ VBO với glDrawArrays làm việc trong OpenGL 2.1 nhưng không phải trong OpenGL 3.x
- 10. Bạn có thể sử dụng nhiều mục tiêu với một VBO đơn không?
- 11. Android: Đồng bộ hóa với chuỗi trình kết xuất OpenGL
- 12. iPad 3 renderInContext chậm - Hiệu suất kết xuất kém
- 13. OpenGL ES sẽ không xóa kết cấu của tôi trong bộ nhớ
- 14. Trình kết xuất đồ họa 2D Vector cho OpenGL
- 15. OpenGL là tốt hơn để vẽ hàng loạt hoặc để có VBO tĩnh
- 16. Nén kết cấu OpenGL của Android
- 17. Các vấn đề với OpenGL 4 VBO và mảng Numpy, Pyglet/Python
- 18. Cách sử dụng nhiều chế độ xem trong OpenGL?
- 19. Mô hình làm chậm trò chơi - opengl
- 20. Chương trình chậm hơn khi sử dụng nhiều chủ đề
- 21. Kết xuất PDF của Android
- 22. Cách tăng tốc kết xuất bằng OpenGL (ES) 2 Android
- 23. kết xuất tệp OBJ sử dụng THREE.OBJLoader
- 24. OpenGL ES 2.0: Thiết lập hiệu quả nhất cho VBO với GL_STREAM_DRAW?
- 25. Doctrine2 liên kết nhiều người sẽ không sử dụng truy vấn JOIN
- 26. Kết cấu OpenGL có nhiều ngữ cảnh hiển thị
- 27. Sử dụng OpenGl với C#?
- 28. Sử dụng chỉ mục làm tọa độ trong OpenGL
- 29. framebuffer và sử dụng shaders trong opengl
- 30. Direct3D có nên được sử dụng trên OpenGL trong Windows không?
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. –
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
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