Tôi đang nghĩ về một cảnh loại minecraft, trong đó voxel có nghĩa là một thế giới của các khối thực sự được kết xuất bằng đa giác:
Nếu bạn sử dụng một shader hình học, sẽ khó tránh khỏi việc có chính xác ba khuôn mặt (hoặc bất cứ thứ gì) trên mỗi voxel.
Nếu bạn có nhiều khối liền kề có cùng kết cấu thì bạn có thể sử dụng ốp lát họa tiết để có ít hình tam giác hơn trong dải (suy biến) trong cách tiếp cận VBO. Ý tôi là, nếu có một khu vực rộng lớn 6x6 của cỏ voxels, bạn có thể vẽ toàn bộ đỉnh chỉ trong 2 hình tam giác thay vì 64.
Với cách tiếp cận của GS, bạn không thể loại bỏ các khuôn mặt tầm thường bị che khuất bởi các voxels liền kề rất đơn giản với cách tiếp cận VBO.
Tôi chưa thử phương pháp GS, nhưng tôi có thể nói rằng phương pháp VBO với việc kết hợp lặp lại các ô liền kề hoạt động rất tốt. Tôi thấy lộn xộn với các chỉ số phần tử chậm hơn nhiều so với việc chỉ lặp lại các đỉnh. Nếu bạn chia thế giới của mình thành các khối nhỏ đẹp, bạn thường có thể sử dụng chỉ một byte cho mỗi thành phần trên mỗi đỉnh và thậm chí đóng gói thông tin kết cấu và quy tắc (một mặt trên khối lập phương có trục chỉ có 3 quy tắc có thể), v.v. 4 byte cho mỗi đỉnh là tốt và nhanh chóng.
Tôi đã sử dụng các VBO riêng biệt cho mỗi trong số 6 khuôn mặt - bạn chỉ cần vẽ tối đa 3 trong số chúng. Điều này rất phù hợp với kết cấu khác nhau thường được sử dụng trên các phần trên cùng của voxels kiểu minecraft. Bởi vì đối với mỗi bộ bình thường và như vậy là đồng nhất.
Với việc sử dụng các pixmap được xếp theo chiều dọc trong một tập bản đồ với GL_REPEAT
trục ngang và có các phiên bản xoay 90 độ trong cùng một tập bản đồ, tôi thấy tôi có thể vẽ một lượng lớn các khối rõ ràng khác nhau bằng cách sử dụng cùng một VBO trong cùng một cuộc gọi. Trong ví dụ về diện tích cỏ 6x6, tôi đã chia nó thành 12 hình tam giác khi tôi chỉ lặp lại trên một chiều trong tập bản đồ của mình.
Tôi hầu như đã làm cho nó hoạt động ở mức rất thấp của chip đồ họa tích hợp và di động, nơi GS chỉ là thứ tôi có thể mơ về một ngày nào đó chơi cùng.