OpenGL (libgdx) - смешивание альфа-карты

Я пытаюсь смешать белую текстуру с различными значениями альфа-канала с цветным фоном. Я ожидаю, что в результате сохранятся цвета фона и будут заменены альфа-значения на значения из смешанной текстуры.

Итак, для фона я использую:

Gdx.gl.glEnable(GL20.GL_BLEND);
Gdx.gl.glBlendEquationSeparate(GL20.GL_FUNC_ADD, GL20.GL_FUNC_ADD);
Gdx.gl.glBlendFuncSeparate(GL20.GL_ONE, GL20.GL_ZERO, GL20.GL_ONE, GL20.GL_ZERO);

Я ожидаю, что сетка фоновых треугольников переопределит назначение, как цвет, так и альфа.

Вопрос 1 - почему с этими параметрами blendFunc значение альфа игнорируется? Если я установил blendfunc на GL_ONE, GL_ONE, GL_ZERO, GL_ZERO, тогда заполненная сетка будет отображаться с правильным альфа-уровнем, но предполагается, что и исходная, и конечная альфа-альфа должны быть умножены на ноль - почему это работает?

====

Теперь, чтобы смешать альфа-карту, которую я использую:

Gdx.gl.glBlendEquationSeparate(GL20.GL_FUNC_ADD, GL20.GL_FUNC_ADD);
Gdx.gl.glBlendFuncSeparate(GL20.GL_ZERO, GL20.GL_ONE, GL20.GL_ONE, GL20.GL_ZERO);

Вопрос 2 - Это должно сохранить целевой цвет и заменить альфу. Однако, когда я визуализирую текстуру с этими параметрами blendfunc, я вообще не получаю никаких изменений в выводе ...

Я снова и снова читаю главу о смешивании opengl, чтобы понять, чего я не понимаю, пожалуйста, поделитесь своим мнением о том, как эти параметры на самом деле работают


person Yarangi Dve    schedule 14.05.2015    source источник


Ответы (1)


Я использую это:

Gdx.gl.glEnable(GL20.GL_BLEND);
Gdx.gl.glBlendFunc(GL20.GL_SRC_ALPHA, GL20.GL_ONE_MINUS_SRC_ALPHA);

Работает, но только в порядке рендеринга. Чтобы учесть глубину, вам понадобится альфа-тестирование, которое libGDX не включает.

person Daniel Funicello    schedule 14.03.2016