OpenGL ES 2.0: Sử dụng VBO?


7

OpenGL VBO (đối tượng bộ đệm đỉnh) đã được phát triển để cải thiện hiệu suất của OpenGL ( OpenGL ES 2.0 trong trường hợp của tôi). Logic là với sự trợ giúp của VBO, dữ liệu không cần phải sao chép từ bộ nhớ máy khách sang card đồ họa trên cơ sở từng khung hình.

Tuy nhiên, như tôi thấy, bối cảnh trò chơi thay đổi liên tục: vị trí của các vật thể thay đổi, tỷ lệ thay đổi và xoay của chúng, chúng hoạt hình, chúng phát nổ, chúng sinh sản hoặc biến mất.

Trong môi trường rất năng động, chẳng hạn như bối cảnh trò chơi trên máy tính, điểm sử dụng VBO là gì , nếu VBO sẽ cần phải được xây dựng trên cơ sở từng khung hình?

Bạn có thể vui lòng giúp tôi hiểu cách thực sự mang lại lợi ích của VBO trong các trò chơi trên máy tính không? Có thể có nhiều VBO dựa trên đỉnh hơn (giả sử một trên một đối tượng) hoặc phải luôn luôn có chính xác một VBO cho mỗi chu kỳ vẽ?

Câu trả lời:


13

Trong môi trường rất năng động, chẳng hạn như bối cảnh trò chơi trên máy tính, điểm sử dụng VBO là gì, nếu VBO sẽ cần phải được xây dựng trên cơ sở từng khung hình?

Nếu bạn đang xây dựng lại dữ liệu đỉnh cho mọi đối tượng mỗi khung hình, bạn đã làm sai. Hoặc ít nhất, có lẽ bạn đang làm nó không hiệu quả.

Di chuyển các đối tượng trong một cảnh có thể và thường nên được thực hiện bằng cách thay đổi ma trận biến đổi thế giới được sử dụng để hiển thị đối tượng đó, không thay đổi trực tiếp dữ liệu đỉnh. Hoạt hình xương cũng có giải pháp hoàn toàn trên GPU. Các đối tượng có thể phân tách có thể được hiển thị với các ma trận biến đổi riêng biệt, sao cho chúng xuất hiện cùng nhau cho đến khi chúng cần được phân tách, và sau đó các ma trận được điều chỉnh để làm cho chúng tách ra như mong muốn. Các đối tượng không thể nhìn thấy hoặc không sinh ra không cần phải được hiển thị, ngay cả khi dữ liệu đỉnh của chúng nằm trên thẻ từ khung trước - chúng không cần bộ đệm bị phá hủy / tái tạo mỗi khi tầm nhìn của chúng bật.

Bạn có thể vui lòng giúp tôi hiểu cách thực sự mang lại lợi ích của VBO trong các trò chơi trên máy tính không? Có thể có nhiều VBO dựa trên đỉnh hơn (giả sử một trên một đối tượng) hoặc phải luôn luôn có chính xác một VBO cho mỗi chu kỳ vẽ?

Bạn có thể có nhiều bộ đệm đỉnh. Nói chung, bạn có một lưới cho mỗi lưới / mô hình và bạn đề cập đến cấu trúc dữ liệu lưới / mô hình đơn lẻ đó với một tập hợp các đối tượng có thể kết xuất có thể chứa ma trận biến đổi thế giới duy nhất của riêng chúng. Bằng cách này, nếu bạn có 50 kẻ thù, tất cả đều sử dụng cùng một lưới, bạn chỉ cần lưới đó trong bộ nhớ một lần. Sau đó, bạn có 50 cấu trúc thể hiện nhỏ hơn, nhẹ hơn tham chiếu đến lưới đó và giữ một biến đổi thế giới duy nhất được sử dụng khi hiển thị từng thể hiện.


+1 cho câu trả lời chi tiết này. Tôi thấy rằng tôi sẽ phải chú ý đến việc xây dựng và chuẩn bị cảnh, vì vậy tôi tránh trùng lặp các đỉnh. Mặc dù câu trả lời này xem tôi là Câu trả lời được chấp nhận nhưng tôi sẽ đợi một lúc để xem, nếu tôi nhận được câu trả lời hữu ích hơn.
Bunkai.Satori

3

Bạn có thể có nhiều VBO như bạn muốn. Bạn cũng có thể có mỗi khung hình động trong một VBO hoặc toàn bộ hoạt hình trong một VBO. Bạn cũng có thể sử dụng hoạt hình Per vertex, được thực hiện với cùng một dữ liệu, nhưng được chuyển đổi trong shader đỉnh (chương trình).

Nếu bạn thay đổi vị trí, góc quay hoặc tỷ lệ của đối tượng, nó sẽ không thay đổi VBO, nó sẽ chỉ thay đổi ma trận biến đổi.

Vì vậy, nếu bạn có đủ bộ nhớ, bạn có thể chuyển tất cả dữ liệu của mình sang bộ nhớ đồ họa trong giai đoạn khởi tạo.


+1 cho câu trả lời này. Tôi đang nghiên cứu một số tài liệu ngay bây giờ, nhưng câu trả lời của bạn chỉ cho tôi đi đúng hướng. Cảm ơn.
Bunkai.Satori

"Hoạt hình trên mỗi đỉnh" thường không có nghĩa là logic hoạt hình được thực hiện trong một shader, chỉ là mỗi đỉnh hoạt hình - điều này hầu như luôn luôn như vậy. Bạn có muốn phân biệt giữa hoạt hình keyframe dựa trên đỉnh (trong đó mỗi khung hình của hoạt hình là một bản sao hoàn chỉnh của lưới và bạn pha trộn giữa chúng) và hoạt hình xương (trong đó các đỉnh được xếp theo thứ bậc xương và hoạt hình đơn giản)? Cả hai có thể được thực hiện trên cả CPU hoặc GPU.
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.