2014-11-13 13 views
8

Tôi đã viết một công cụ dựa trên nền tảng - mọi thứ đều ổn khi miễn là chống răng cưa bị tắt trong WebGL.Tắt tính năng chống răng cưa trong WebGL cho hình học cụ thể

Khi tính năng chống răng cưa được bật, đôi khi pixel của cạnh gạch sẽ được hiển thị chủ yếu hiển thị dưới dạng pixel nền và điền vào bộ đệm độ sâu phù hợp. Khi một điểm ảnh có cường độ cao hơn (alpha cao hơn) xuất hiện, nó sẽ bị loại bỏ do bộ đệm độ sâu.

Tôi đã cố gắng tắt bộ đệm độ sâu và "đặt các yếu tố kết hợp thành GL_SRC_ALPHA_SATURATE (nguồn) và GL_ONE (đích)" như được ghi ở đây: http://www.glprogramming.com/red/chapter06.html. Điều này dẫn đến điểm ảnh hoàn toàn màu trắng được rút ra - không chắc chắn những gì đang xảy ra ở đó.

Đồ họa trên họa tiết của tôi được đệm để WebGL không có vấn đề về lọc. Tôi đã thực hiện padding cực đoan để đảm bảo điều này không phải là một yếu tố góp phần.

Tôi đã khám phá glSampleCoverage() và đã thử một vài bức ảnh trong bóng tối với các giá trị ngẫu nhiên không tạo ra giá trị nào. Tôi không quen với những gì nó thực sự làm và không thể tìm thấy bất kỳ ví dụ tốt trực tuyến, ngoại trừ một vài gợi ý trừu tượng.

Tôi không muốn tắt bộ đệm độ sâu.

GL_MULTISAMPLE không khả dụng.

Tôi có một Emscripten với môi trường C++ - nhưng điều đó không quan trọng, tôi có thể viết javascript nội tuyến nếu cần - nhưng tôi hình dung giải pháp OpenGL chung cho điều này.

Có cách nào để vô hiệu hóa chống răng cưa trong WebGL chỉ cho một số hình học nhất định không?

Tốt: Good

Xấu: Bad

+0

Đây có lẽ không phải là câu trả lời bạn đang tìm kiếm, nhưng gần đây tôi chạy vào một vấn đề tương tự bản thân mình và tôi đã tự hỏi nếu bạn đã thực hiện bất kỳ sự tiến bộ trong việc giải quyết nó? –

+0

@ WacławJasper Giải pháp hiện tại của tôi đã được vô hiệu hóa khử răng cưa hoàn toàn, không may. –

Trả lời

0

Bất kỳ tài liệu tôi có thể tìm thấy trên WebGL cho thấy rằng nó chỉ hỗ trợ toàn màn hình Anti-Aliasing với việc xây dựng cơ sở vật chất AA.

Vấn đề chính trong trường hợp của bạn là nhiều thuật toán AA là "hậu xử lý", sẽ được thực hiện sau khi tất cả hình học của bạn đã hiển thị. Họ chỉ biết về các điểm ảnh, để nói chuyện.

Một giải pháp có thể là viết Anti-Aliasing của riêng bạn, hoạt động ra thông tin hình học thay vì nếu có hoặc có thể hoạt động trong bối cảnh của một mảnh hình học duy nhất.

http://www.humus.name/index.php?page=3D&ID=87 http://en.wikipedia.org/wiki/Supersampling

+0

Thật không may nó không phải là một câu trả lời thực tế - đặc biệt là không khi bạn xem xét hiệu suất đã bị mất trong cổng HTML5 của một trò chơi 3D. –

+0

GBAA là thuật toán chỉ GPU. Câu trả lời của tôi sẽ là kiểm tra giả định mà bạn đang thực hiện với bằng chứng thực nghiệm mặc dù hồ sơ. Bạn có một thực hiện tham chiếu DirectX, phá vỡ caffein và khuấy động âm nhạc. – BlamKiwi

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