Ich habe eine Kachel-basierte Engine geschrieben - alles sieht gut aus, solange Antialiasing in WebGL deaktiviert ist.
Wenn Antialiasing aktiviert ist, werden manchmal Pixel der Kanten von Kacheln gerendert, die meistens als Hintergrundpixel angezeigt werden und den Tiefenpuffer entsprechend ausfüllen. Wenn ein viel intensiveres (höheres Alpha) Pixel hereinkommt, wird es aufgrund des Tiefenpuffers verworfen.
Ich habe versucht, den Tiefenpuffer zu deaktivieren, und "setze die Mischfaktoren auf GL_SRC_ALPHA_SATURATE (source) und GL_ONE (destination)" wie hier dokumentiert: Ссылка . Dies führt dazu, dass rein weiße Pixel gezeichnet werden - nicht sicher, was dort vor sich geht.
Die Grafiken in meinen Texturen sind alle gepolstert, so dass WebGL keine Probleme beim Filtern haben sollte. Ich habe die Polsterung extrem gemacht, um sicherzustellen, dass dies kein Faktor ist.
Ich habe glSampleCoverage()
erkundet und ein paar Aufnahmen im Dunkeln mit zufälligen Werten versucht, die nichts wert sind. Ich bin nicht vertraut mit dem, was es tatsächlich tut und kann keine guten Beispiele online finden, außer ein paar abstrakten Vorschlägen.
Ich würde den Tiefenpuffer lieber nicht deaktivieren.
GL_MULTISAMPLE
ist nicht verfügbar.
Ich habe ein Emscript mit C ++ Umgebung - aber das ist egal, ich kann bei Bedarf Javascript inline schreiben - aber ich denke, es gibt generische OpenGL-Lösungen dafür.
Gibt es eine Möglichkeit, das Antialiasing in WebGL nur für bestimmte Geometrie zu deaktivieren?
Gut:
Schlecht:
Jede Dokumentation, die ich in WebGL finden kann, legt nahe, dass sie nur Anti-Aliasing im Vollbildmodus mit den eingebauten AA-Funktionen unterstützt.
Das Hauptproblem in Ihrem Fall ist, dass viele AA-Algorithmen "nachbearbeitet" werden, die ausgeführt werden, sobald alle Ihre Geometrie gerendert ist. Sie kennen nur die Pixel sozusagen.
Eine mögliche Lösung wäre, Ihr eigenes Anti-Aliasing zu schreiben, das statt dessen Geometriedaten verarbeitet oder im Kontext eines einzelnen Geometrieteils arbeiten kann.
Tags und Links javascript c++ opengl-es emscripten webgl