2014-11-13 14 views
8

Ich habe eine Kachel-basierte Engine geschrieben - alles sieht gut aus, solange Antialiasing in WebGL deaktiviert ist.Deaktivieren Sie Antialiasing in WebGL für bestimmte Geometrie

Wenn Antialiasing aktiviert ist, werden manchmal Pixel am Rand 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 "die Mischfaktoren zu GL_SRC_ALPHA_SATURATE (Quelle) und GL_ONE (Ziel)" wie hier dokumentiert: http://www.glprogramming.com/red/chapter06.html. Dies führt dazu, dass rein weiße Pixel gezeichnet werden - nicht sicher, was dort vor sich geht.

Die Grafiken auf meinen Texturen sind alle aufgefüllt, so dass WebGL keine Probleme mit der Filterung haben sollte. Ich habe die Polsterung extrem gemacht, um sicherzustellen, dass dies nicht dazu beigetragen hat.

Ich habe glSampleCoverage() erkundet und versuchte ein paar Schüsse im Dunkeln mit zufälligen Werten, nichts Wertvolles zu produzieren. 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 lieber den Tiefenpuffer nicht deaktivieren.

GL_MULTISAMPLE ist nicht verfügbar.

Ich habe ein Emscript mit C++ - Umgebung - aber das ist egal, ich kann inline Javascript schreiben, wenn nötig - aber ich denke, es gibt generische OpenGL-Lösungen zu diesem.

Gibt es eine Möglichkeit, Antialiasing in WebGL nur für bestimmte Geometrie zu deaktivieren?

Gut: Good

Bad: Bad

+0

Dies ist wahrscheinlich nicht die Antwort, die Sie suchen, aber ich laufe vor kurzem in ein ähnliches Problem, mich und ich frage mich, ob Sie bei der Lösung es keine Fortschritte gemacht haben? –

+0

@ WacławJasper Meine aktuelle Lösung bestand darin, leider Antialiasing ganz zu deaktivieren. –

Antwort

0

Jede Dokumentation ich auf WebGL finden lässt vermuten, dass es nur Vollbild-Anti-Aliasing mit dem in AA Einrichtungen gebaut unterstützt.

Das Hauptproblem in Ihrem Fall ist, dass viele AA-Algorithmen "nachbearbeiten", die ausgeführt werden sollen, sobald alle Ihre Geometrie gerendert hat. Sie kennen nur die Pixel sozusagen.

Eine mögliche Lösung wäre, Ihr eigenes Anti-Aliasing zu schreiben, das stattdessen Geometriedaten verarbeitet oder im Kontext eines einzelnen Geometrieelements arbeiten kann.

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

+0

Leider ist das keine realistische Antwort - besonders nicht, wenn man bedenkt, dass die Leistung im HTML5-Port eines 3D-Spiels bereits verloren gegangen ist. –

+0

GBAA ist ein GPU-Algorithmus. Meine Antwort wäre, diese Annahme, die Sie mit empirischen Beweisen machen, durch Profiling zu testen. Sie haben eine DirectX-Referenzimplementierung, brechen das Koffein aus und machen Musik. – BlamKiwi

Verwandte Themen