Подтвердить что ты не робот

Режим смешивания Photoshop для OpenGL ES без шейдеров

Мне нужно подражать режимам смешивания Photoshop ( "умножить", "экран" и т.д.) в моем коде OpenGL ES 1.1 ( без шейдеров).

Есть несколько документов о том, как это сделать с HLSL:

Мне нужен по крайней мере рабочий экранный режим.

Есть ли какие-либо реализации по фиксированному конвейеру, на который я могу смотреть?

4b9b3361

Ответ 1

Большинство режимов смешивания фотошоп основаны на Blendmodes Porter-Duff.

Для этого требуется, чтобы все ваши изображения (текстуры, renderbuffer) находились в предварительно умноженном цветовом пространстве. Обычно это делается путем умножения всех значений пикселей на альфа-значение перед их сохранением в текстуре. Например. полный прозрачный пиксель будет выглядеть черным в невозмущенном цветовом пространстве. Если вы не знакомы с этим цветовым пространством, проведите час или два, прочитав об этом в Интернете. Это аккуратная и хорошая концепция и требуется для фотошоп-подобных композиций.

В любом случае - если у вас есть изображения в этом формате, вы можете включить SCREEN, используя:

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR)

Полный режим MULTIPLY невозможен с конвейером OpenGL | ES. Если вы работаете только с полными непрозрачными пикселями, вы можете подделать его, используя:

glBlendFunc(GL_ZERO, GL_SRC_COLOR)

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

Ответ 2

вы должны попробовать следующее:

glBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA)

Это выглядит как умножение на меня на iPhone/OpenGL ES

Ответ 3

Лучшее место для начала - собрать копию Красная книга и прочитать главу о материалах и режимах наложения. В нем содержится очень подробное и ясное объяснение того, как работают "классические" функции смешивания OpenGL.

Ответ 4

Я обнаружил, что используя это:

glDepthFun( GL_LEQUAL);

всем нужно было получить эффект экрана, по крайней мере, он хорошо работал в моем проекте.

Я не уверен, почему это работает, но если кто-то знает, пожалуйста, поделитесь.