Tôi có cần sử dụng một bộ đệm đỉnh cho mỗi lưới hay tôi có thể lưu trữ nhiều mắt lưới trong một bộ đệm đỉnh không? Nếu vậy, tôi nên làm điều đó, và làm thế nào tôi sẽ làm điều đó?Nhiều mắt lưới trong một bộ đệm đỉnh?
Trả lời
Bạn có thể lưu trữ nhiều mắt lưới trong một bộ đệm đỉnh. Bạn có thể đạt được một số hiệu suất bằng cách đặt một số mắt lưới nhỏ trong một bộ đệm. Đối với các mắt lưới thực sự lớn, bạn nên sử dụng bộ đệm riêng biệt. SetStreamSource
cho phép bạn chỉ định độ lệch vùng đệm đỉnh cho lưới hiện tại của bạn.
pRawDevice->SetStreamSource(0, m_VertexBuffer->GetBuffer(), m_VertexBuffer->GetOffset(), m_VertexBuffer->GetStride());
Với OpenGL, bạn có thể sử dụng glVertexPointer()
để bắt đầu vẽ từ một khoảng bù nhất định bên trong VBO. không chắc chắn về D3D.
TBH thường là lý do để đặt tất cả trong một bộ đệm lớn là lưu vào cuộc gọi vẽ. Chi phí chuyển đổi một bộ đệm đỉnh là khá nhỏ. Nếu bạn có thể hợp nhất tất cả chúng thành 1 vertex buffer và render 10 đối tượng trong 1 draw call thì bạn sẽ có một chiến thắng lớn.
Thông thường để hợp nhất chúng, bạn chỉ cần tạo 1 bộ đệm đỉnh lớn với tất cả các dữ liệu đỉnh, đã được thế giới chuyển đổi trong nó, cái khác. Sau đó, bạn thiết lập một bộ đệm chỉ mục để hiển thị chúng lần lượt. Sau đó, bạn có mọi thứ vẽ trong các cuộc gọi vẽ tối thiểu. Tất nhiên nếu bạn di chuyển một thứ đòi hỏi phải cập nhật một phần của bộ đệm đỉnh, đó là lý do tại sao nó là một tình huống lý tưởng cho hình học tĩnh.
Nếu tất cả các đối tượng giống nhau, bạn sẽ chỉ sử dụng 1 bộ đệm đỉnh (với 1 định nghĩa đối tượng trong đó) và 1 bộ đệm chỉ mục đúng không? Ma trận di chuyển hoặc tạo hiệu ứng đối tượng ...
Nếu tất cả các đối tượng khác nhau và di chuyển/hoạt hình thì tôi chỉ cần gắn với các VB riêng lẻ. Tôi nghi ngờ bạn sẽ nhận thấy bất kỳ sự khác biệt bằng cách kết hợp tất cả chúng lại với nhau.
Vâng, kinh nghiệm của tôi là nó không tạo ra sự khác biệt nhiều như vậy miễn là bộ đệm của bạn không thực sự nhỏ hoặc thực sự lớn. Tôi nghi ngờ rằng bất kỳ không hiệu quả trong việc chuyển đổi bộ đệm sẽ được kết hợp bởi sự gia tăng hiệu quả bằng cách cho người lái nhiều operatunities để quản lý bộ nhớ của nó với bộ đệm nhỏ hơn.
- 1. Nhiều bộ đệm logic trong một bộ đệm khung thực
- 2. OpenGL ES 2.0 nhiều mắt lưới? (chỉ các ví dụ trong thế giới thực)
- 3. Sử dụng nhiều bộ đệm Vertex Trong DX10/DX11
- 4. cách căn chỉnh hai mắt lưới
- 5. Sử dụng bộ đệm khung làm bộ đệm đỉnh mà không di chuyển dữ liệu đến CPU
- 6. Tìm các đỉnh trong lưới tam giác đều bắt nguồn từ một đỉnh trung tâm
- 7. Tính tọa độ UV phẳng cho các mắt lưới tùy ý
- 8. OpenGL ES 2.0 và các đối tượng đệm đỉnh (VBO)
- 9. 1D phát hiện nhiều đỉnh?
- 10. Bộ đệm riêng biệt OpenGLES 2.0 cho các đỉnh, màu sắc và tọa độ kết cấu
- 11. Xử lý bộ đệm gốc bộ đệm trực tiếp trong Java cho JOGL
- 12. Cách thích hợp để sửa đổi bộ đệm đỉnh OpenGL là gì?
- 13. 3 bộ đệm chỉ mục
- 14. Cách sử dụng nhiều bộ đệm trong đường ray?
- 15. Tiêm bộ đệm khung
- 16. Làm thế nào để phát hiện các đỉnh biên của một mô hình 3D mở lưới?
- 17. Bộ đệm chỉ mục trong WebGL?
- 18. Di chuyển điểm trong một bộ đệm đến cùng một số dòng như điểm trong một bộ đệm khác nhau
- 19. GlDrawElements() có hiệu quả hơn glDrawArrays() khi có nhiều đỉnh trùng lặp không?
- 20. OpenGL có đảm bảo rằng các nguyên thủy trong bộ đệm đỉnh sẽ được vẽ theo thứ tự không?
- 21. để tìm các cạnh bằng cách sử dụng các đỉnh (2D và 3D) trong lưới
- 22. Bộ đệm sâu trong OpenGL
- 23. Điểm số cao trong lưới đi bộ
- 24. Lỗi bộ đệm trong avcodec_decode_audio4()
- 25. Class.forName() bộ nhớ đệm
- 26. Chỉ định động cục bộ trong lưới
- 27. Bộ nhớ đệm mùa xuân so với bộ nhớ đệm
- 28. Chính xác là một bộ đệm trong OpenGL, và làm cách nào tôi có thể sử dụng nhiều bộ đệm cho lợi thế của mình?
- 29. Bộ đệm C++ và cout, và bộ đệm nói chung
- 30. Phát hiện tứ diện trong một lưới tam giác?