Shader hình học cho nhiều nguyên thủy


8

Làm thế nào tôi có thể tạo một shader hình học có thể xử lý nhiều nguyên thủy? Ví dụ: khi tạo một shader hình học cho các hình tam giác, tôi định nghĩa một bố cục như sau:

layout(triangles) in;
layout(triangle_strip, max_vertices=3) out;

Nhưng nếu tôi sử dụng trình đổ bóng này thì các đường hoặc điểm sẽ không hiển thị. Vì vậy, thêm:

layout(triangles) in;
layout(triangle_strip, max_vertices=3) out;
layout(lines) in;
layout(line_strip, max_vertices=2) out;

Trình đổ bóng sẽ biên dịch và chạy, nhưng sẽ chỉ hiển thị các dòng (hoặc bất cứ điều gì nguyên thủy cuối cùng được xác định là).

Vậy làm thế nào để tôi xác định một shader hình học duy nhất sẽ xử lý nhiều loại nguyên thủy? Hoặc là không thể và tôi cần phải tạo nhiều chương trình đổ bóng và thay đổi chương trình đổ bóng trước khi vẽ từng loại?

Câu trả lời:


7

Tôi không tin OpenGL hỗ trợ các trình tạo bóng hình học tạo ra nhiều loại nguyên thủy. Tôi thực sự ngạc nhiên khi khối mã thứ hai của bạn được biên dịch ... Có lẽ nó chỉ ghi đè lên cấu hình?

Bạn sẽ phải tạo nhiều shader và chuyển đổi giữa chúng, ít nhất là cho các hình tam giác / đường và điểm. Thực sự có một mẹo bạn có thể làm với một shader mảnh để nhận các hình tam giác nhưng chỉ hiển thị các đường bằng cách loại bỏ các mảnh rơi quá xa bên trong tam giác theo tọa độ barycentric. Để thực hiện chính xác điều đó, tôi sẽ giới thiệu bạn đến Sách Cam OpenGL và phần của nó về các trình tạo bóng hình học và vẽ khung dây (Tôi sẽ quay lại và chỉnh sửa sau khi tôi theo dõi chương chính xác).

Chúc mừng mã hóa!


2

Không thể tạo một chương trình với các shader hình học xử lý nhiều kiểu nguyên thủy.

Điều đó đang được nói, bạn không phải làm rất nhiều công việc để hỗ trợ nhiều loại nguyên thủy. Nhờ ARB_separate_shader_objects , bạn không còn phải liên kết tất cả các giai đoạn đổ bóng của mình với nhau. Bạn có thể có một chương trình chỉ đỉnh, một chương trình chỉ phân đoạn và 2-3 chương trình chỉ hình học mà bạn trộn và kết hợp với nhau. Miễn là họ sử dụng các giao diện tương thích, bạn sẽ ổn thôi.

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.