Я написал движок на основе плиток — все выглядит хорошо, если в WebGL отключено сглаживание.
Когда сглаживание включено, иногда отображаются пиксели края плиток, которые в основном отображаются как фоновые пиксели и соответствующим образом заполняют буфер глубины. Когда появляется гораздо более интенсивный (с более высокой альфа) пиксель, он отбрасывается из-за буфера глубины.
Я попытался отключить буфер глубины и «установить коэффициенты смешивания в GL_SRC_ALPHA_SATURATE (источник) и GL_ONE (пункт назначения)», как описано здесь: http://www.glprogramming.com/red/chapter06.html . Это приводит к рисованию чисто белых пикселей — не уверен, что там происходит.
Графика на моих текстурах дополняется, поэтому у WebGL не должно быть проблем с фильтрацией. Я сделал экстремальные отступы, чтобы это не способствовало.
Я исследовал glSampleCoverage()
и попытался сделать несколько снимков в темноте со случайными значениями, которые ничего не дали. Я не знаком с тем, что он на самом деле делает, и не могу найти хороших примеров в Интернете, кроме нескольких абстрактных предложений.
Я бы предпочел не отключать буфер глубины.
GL_MULTISAMPLE
не доступен.
У меня есть среда Emscripten с C ++ — но это не имеет значения, я могу написать встроенный javascript, если это необходимо — но я думаю, что для этого есть общие решения OpenGL.
Есть ли способ отключить сглаживание в WebGL только для определенной геометрии?
Хорошо:
Плохой:
Любая документация, которую я могу найти в WebGL, предполагает, что он поддерживает только полноэкранное сглаживание со встроенными средствами AA.
Основная проблема в вашем случае состоит в том, что многие алгоритмы АА являются «постобработкой», которая должна выполняться после того, как вся ваша геометрия отрисована. Они знают только о пикселях, так сказать.
Возможным решением было бы написать свой собственный сглаживание, которое вместо этого работает с информацией о геометрии, если она доступна, или может работать в контексте одного фрагмента геометрии.
http://www.humus.name/index.php?page=3D&ID = 87
http://en.wikipedia.org/wiki/Supersampling