2010-09-25 27 views
13

Tôi muốn vẽ voxels bằng cách sử dụng opengl nhưng nó không có vẻ như nó được hỗ trợ. Tôi đã thực hiện một chức năng vẽ khối lập phương có 24 đỉnh (4 đỉnh mỗi mặt) nhưng nó giảm tốc độ khung hình khi bạn vẽ 2500 khối. Tôi đã hy vọng có một cách tốt hơn. Lý tưởng nhất là tôi chỉ muốn gửi một vị trí, kích thước cạnh và màu sắc cho card đồ họa. Tôi không chắc liệu tôi có thể thực hiện điều này hay không bằng cách sử dụng GLSL để biên dịch các hướng dẫn như một phần của trình đổ bóng phân đoạn hoặc trình đổ bóng đỉnh.Cách hiệu quả nhất để vẽ voxels (hình khối) trong opengl là gì?

Tôi đã tìm kiếm trên google và tìm hiểu về các điểm sprites và các mẩu quảng cáo (cùng một điều?). Những người có thể được sử dụng như là một thay thế để vẽ một khối lập phương nhanh hơn? Nếu tôi sử dụng 6, một cho mỗi khuôn mặt, có vẻ như đó sẽ gửi ít thông tin hơn cho card đồ họa và hy vọng đạt được tốc độ khung hình tốt hơn.

Một suy nghĩ khác có lẽ là tôi có thể vẽ nhiều hình khối bằng cách sử dụng một cuộc gọi drawelements?

Có thể có một phương pháp tốt hơn hoàn toàn mà tôi không biết? Bất kỳ trợ giúp được đánh giá cao.

Trả lời

12

Vẽ voxels với hình khối gần như luôn luôn là sai đường đi (trường hợp đặc biệt là theo dõi tia). Những gì bạn thường muốn làm là đưa dữ liệu vào một kết cấu 3D và render lát tùy thuộc vào vị trí máy ảnh. Xem trang này: https://developer.nvidia.com/gpugems/GPUGems/gpugems_ch39.html và bạn có thể tìm thấy các kỹ thuật khác bằng cách tìm kiếm "gpu hiển thị khối lượng".

+0

Có, hiển thị trở lại trước dọc theo trục được căn chỉnh nhất với hướng xem. Bắt đầu bằng cách render quads với độ trong suốt. Khi công trình đó hoạt động, bạn cũng có thể thử chèn "các cạnh" giữa mỗi lớp. – phkahler

+0

Liên kết của bạn đã bị hỏng ngay bây giờ. – Ruslan

+0

@Ruslan cập nhật – ybungalobill

5

Những gì bạn đang tìm kiếm được gọi là instancing. Bạn có thể xem glDrawElementsInstancedglDrawArraysInstanced để có một vài khả năng. Lưu ý rằng chúng chỉ được thêm vào dưới dạng hoạt động chính tương đối gần đây (OGL 3.1), nhưng đã có sẵn dưới dạng tiện ích mở rộng khá lâu hơn.

nVidia OpenGL SDK có ví dụ về bản vẽ được thể hiện trong OpenGL.

0

Trước tiên, bạn thực sự nên xem xét OpenGL 3+ bằng GLSL. Đây là tiêu chuẩn trong một thời gian. Thứ hai, hầu hết các triển khai Minecraft-esque đều sử dụng tạo lưới ở phía CPU. Kỹ thuật này liên quan đến việc xem xét tất cả các vị trí khối và tạo ra một đối tượng bộ đệm đỉnh làm cho hình tam giác của tất cả các mặt tiếp xúc. VBO chỉ được tạo khi các voxels thay đổi và được duy trì giữa các khung. Một thực hiện lý tưởng sẽ kết hợp các mặt đồng phẳng của cùng một kết cấu vào các khuôn mặt lớn hơn.