2013-08-05 32 views
7

Tôi đã đọc qua đặc tả OpenGL cố gắng tìm câu trả lời cho câu hỏi này, không có may mắn. Tôi đang cố gắng để tìm ra nếu OpenGL đảm bảo rằng các cuộc gọi vẽ như GLDrawElements hoặc GLDrawArrays sẽ vẽ các yếu tố chính xác thứ tự chúng xuất hiện trong VBO, hoặc nếu nó là miễn phí để xử lý các mảnh của những nguyên thủy theo thứ tự nào.OpenGL có đảm bảo rằng các nguyên thủy trong bộ đệm đỉnh sẽ được vẽ theo thứ tự không?

Ví dụ: nếu tôi có bộ đệm đỉnh có 30 đỉnh đại diện cho 10 hình tam giác, mỗi đỉnh có cùng tọa độ. Nó sẽ luôn luôn là trường hợp tam giác tương ứng với đỉnh 0, 1 và 2 sẽ được trả lại đầu tiên (và do đó ở phía dưới); và tam giác tương ứng với các đỉnh 28, 29, 30 luôn luôn được hiển thị cuối cùng (và do đó ở trên cùng)?

Trả lời

12

Đặc điểm kỹ thuật rất cẩn thận để xác định thứ tự hiển thị mọi thứ. Mảng dữ liệu đỉnh được xử lý theo thứ tự, kết quả trong việc tạo ra các nguyên thủy theo một thứ tự cụ thể. Mỗi nguyên thủy được cho là được rasterized theo thứ tự, và sau này nguyên thủy không thể được rasterized cho đến khi những người trước đó đã hoàn thành.

Tất nhiên, đây là cách OpenGL nói nó sẽ hoạt động. Triển khai có thể (và làm) gian lận bằng cách rasterizing và xử lý nhiều nguyên thủy cùng một lúc. Tuy nhiên, họ sẽ vẫn tuân thủ quy tắc "như thể". Vì vậy, họ lừa dối nội bộ, nhưng vẫn sẽ ghi kết quả như thể nó đã được thực hiện tuần tự.

Vì vậy, có, có một thứ tự cụ thể mà bạn có thể dựa vào. Trừ khi bạn đang sử dụng bóng đổ mà perform incoherent memory accesses; thì tất cả mọi phiên cược đều được tắt để ghi bóng.

1

Mặc dù chúng thực sự có thể được vẽ theo thứ tự khác và hoàn thành vào các thời điểm khác nhau, ở giai đoạn vận hành đường quét cuối cùng, bất kỳ pha trộn nào (hoặc kiểm tra độ sâu/stencil/alpha cho vấn đề đó) sẽ được thực hiện theo thứ tự các hình tam giác đã được phát hành.

Bạn có thể xác nhận điều này bằng cách làm cho một số đối tượng sử dụng một phương trình pha trộn mà không đi lại, ví dụ:

glBlendFunc(GL_ONE, GL_DST_COLOR); 

Nếu nội dung bộ đệm khung chính thức được viết bởi thứ tự tùy ý tương tự mà nguyên thủy có thể được rút ra , sau đó trong ví dụ như vậy bạn sẽ thấy một hiệu ứng trông giống như Z-fighting.

Đây là lý do tại sao nó được gọi là trình đổ bóng phân đoạn (trái ngược với trình đổ bóng pixel) vì nó không phải là pixel kể từ sau giai đoạn đoạn, nó chưa được ghi vào bộ đệm khung; chỉ sau giai đoạn vận hành raster.

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