2011-02-03 37 views
9

Tôi đã thử nhiều tháng để tìm hiểu cách hoạt động của IDirect3DVertexBuffer9IDirect3DIndexBuffer9. Tôi đã đọc nhiều sách, sách điện tử và diễn đàn và tôi vẫn không thể hiểu được cách chúng hoạt động. Ai đó có thể giúp tôi hiểu cách họ làm việc và cách họ liên kết với nhau?Đấu tranh với Vertex và bộ đệm chỉ mục trong Direct3D

PS: Tôi đã thử tìm kiếm thông qua các câu hỏi liên quan nhưng không có gì khiến tôi quan tâm.

Cảm ơn.

Trả lời

7

IndexBuffers được sử dụng cho bộ nhớ & tối ưu hóa tốc độ. Một indexBuffer là một danh sách các chỉ mục lập chỉ mục các đỉnh trong vertexBuffer.

Vì vậy, giả sử tôi sẽ hiển thị một hình phẳng bốn trên màn hình với 2 hình tam giác. Mỗi tam giác chiếm 3 đỉnh, do đó, để render quad với chỉ một VertexBuffer, tôi sẽ cần 6 đỉnh.

Bây giờ nếu tôi sử dụng một IndexBuffer mặc dù, tôi sẽ chỉ cần sử dụng 4 đỉnh (một cho mỗi góc của quad). Nhưng tôi sẽ cần 6 chỉ số, 3 chỉ số cho mỗi tam giác, mà sẽ chỉ số một trong các đỉnh góc.

Trên các mô hình lớn, điều này có thể tiết kiệm bộ nhớ & cải thiện đáng kể tốc độ vì GPU sẽ xử lý ít đỉnh hơn.

Đây là trang web có một số mã mẫu tốt :: http://www.codesampler.com/dx9src.htm Trong đó tải xuống mẫu có tên "Chỉ số hình học".

+0

Cảm ơn bạn, zezba9000. Chỉ cần những gì tôi cần biết. Cảm ơn một lần nữa. – DeadCapacitor

20

Điều này cũng làm tôi bối rối. Một cách khác để suy nghĩ về điều này là trực quan (tôi là một nhà tư tưởng hình ảnh lớn nên có lẽ điều này cũng sẽ giúp bạn).

Mở rộng trên ví dụ zezba của, giả sử chúng ta muốn vẽ một quad sử dụng hai tam giác:

Quad

Như anh/cô ta chỉ ra, điều này có thể được thực hiện chỉ với bốn đỉnh. Vì vậy, bộ đệm đỉnh của bạn sẽ chỉ chứa bốn mục nhập. Tôi sẽ gắn nhãn những {A, B, C, D}:

Quad with vertices: A, B, C, D

Tuy nhiên, vì các bộ xử lý đồ họa thỏa thuận với hình tam giác, chúng ta vẫn cần phải xác định nhóm của BA đỉnh để nói với GPU làm thế nào để tạo ra hình tam giác trong danh sách các đỉnh đã được xác định. Đây là mục đích của bộ đệm chỉ mục.

Bạn có thể nghĩ bộ đệm chỉ mục đơn giản là danh sách các chỉ mục INTO bộ đệm đỉnh xác định tam giác. Vì vậy, kể từ khi chúng tôi đang hình thành hai hình tam giác, và mỗi tam giác cần ba đỉnh, bộ đệm chỉ mục sẽ cần các mục SIX.

Đặt hàng cũng có vấn đề ở đây. Tôi sẽ không đi quá nhiều vào điều đó nhưng chúng ta hãy chỉ nói rằng tôi muốn xác định tam giác của tôi truy cập theo chiều kim đồng hồ. Tôi sẽ xác định hai tam giác của tôi là {B, A, C}{B, C, D}. Nó hoàn toàn tốt đẹp để tái sử dụng đỉnh cho nhiều hình tam giác.

Vì vậy, bộ đệm của tôi kết thúc lên trông như thế này:

Quad with vertex and index buffers

Hope this helps.

+0

Điều đó giúp ích rất nhiều. Cảm ơn, Haylwood. Và vâng, tôi cũng là một nhà tư tưởng hình ảnh :) – DeadCapacitor

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