Napisałem mechanizm oparty na kaflach - wszystko wygląda dobrze, dopóki wygładzanie krawędzi jest wyłączone w WebGL.Wyłącz wygładzanie krawędzi w WebGL dla określonej geometrii
Po włączeniu wygładzania krawędzi czasami renderowane są piksele krawędzi płytek, które najczęściej są wyświetlane jako piksele tła i odpowiednio wypełniają bufor głębi. Kiedy pojawia się o wiele bardziej intensywny (wyższa alfa) piksel, zostaje odrzucony z powodu bufora głębi.
Podjęto próbę wyłączenia bufora głębi i "ustawienia współczynników mieszania na GL_SRC_ALPHA_SATURATE (źródło) i GL_ONE (miejsce docelowe)" zgodnie z dokumentacją: http://www.glprogramming.com/red/chapter06.html. To prowadzi do rysowania wyłącznie białych pikseli - nie jestem pewien, co się tam dzieje.
Grafika na moich teksturach jest wyściełana, więc WebGL nie powinien mieć problemów z filtrowaniem. Dopełniłem podszewkę, aby upewnić się, że to nie jest czynnik sprzyjający.
Zbadałem glSampleCoverage()
i wypróbowałem kilka ujęć w ciemności z losowymi wartościami, które nie przyniosły nic wartego. Nie mam pojęcia, co tak naprawdę robi i nie mogę znaleźć żadnych dobrych przykładów w Internecie, z wyjątkiem kilku abstrakcyjnych sugestii.
Wolę nie wyłączać bufora głębi.
GL_MULTISAMPLE
jest niedostępny.
Mam emscriptena ze środowiskiem C++ - ale to nie ma znaczenia, w razie potrzeby mogę napisać wbudowany javascript - ale sądzę, że istnieje ogólne rozwiązanie OpenGL.
Czy istnieje sposób na wyłączenie wygładzania krawędzi w WebGL tylko dla niektórych geometrii?
Dobre:
Źle:
Prawdopodobnie nie jest to odpowiedź szukasz, ale niedawno napotkasz podobny problem siebie i zastanawiałem się, jeśli dokonały żadnych postępów w rozwiązywaniu go? –
@ WacławJasper Obecnym rozwiązaniem było, niestety, całkowite wyłączenie antyaliasingu. –