2010-05-22 40 views
5

tôi đang cố gắng để pha trộn kết cấu đó có vùng trong suốt:Trộn textures trong suốt với độ sâu

glEnable(GL_TEXTURE_2D); 
glBindTexture(GL_TEXTURE_2D, ...); 
glVertexPointer(2, GL_FLOAT, 0, ...); 
glEnable (GL_BLEND); 
glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA); 
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 

Trừ khi tôi thêm glDisable (GL_DEPTH_TEST), các bộ phận trong suốt của kết cấu đầu ghi đè lên tất cả mọi thứ dưới chân họ (thay vì trộn). Có cách nào để làm điều này mà không vô hiệu hóa chiều sâu? Tôi đã thử nhiều chức năng pha trộn khác nhau nhưng không có sự giúp đỡ nào.

Trả lời

7

Bật kiểm tra độ sâu không thực sự sắp xếp hình học của bạn theo chiều sâu — trong trường hợp GL_LESS thông thường, nó chỉ ngăn cản nguyên thủy vẽ nếu chúng không gần người xem hơn so với trước đây. Điều này cho phép bạn vẽ hình học mờ theo bất kỳ thứ tự nào bạn muốn và vẫn nhận được kết quả mong muốn, nhưng việc kết xuất chính xác hình học được pha trộn thường yêu cầu mọi thứ đằng sau đối tượng được kết hợp đã được hiển thị.

Dưới đây là những gì bạn nên làm để có được một kết hợp của hình học đục và pha trộn để tìm đúng:

  1. riêng hình học pha trộn của bạn từ hình học đục của bạn.
  2. Sắp xếp hình học hỗn hợp của bạn từ sau ra trước.
  3. Vẽ tất cả hình mờ đục đầu tiên như bình thường.
  4. Vẽ hình học pha trộn của bạn theo thứ tự được sắp xếp. Bạn sẽ muốn bật kiểm tra độ sâu nhưng tạm thời tắt ghi độ sâu bằng glDepthMask(GL_FALSE).

Cách khác, nếu nội dung của bạn luôn hoàn toàn mờ đục hoặc trong suốt, bạn chỉ có thể bật thử nghiệm alpha và tắt tính năng trộn, nhưng tôi đoán đó không phải những gì bạn đang tìm kiếm.

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