Я изучаю OpenGL ES 2.0, и я хотел бы создать приложение, чтобы лучше понять, как он работает. Приложение имеет набор фильтров, которые пользователь может применять на изображениях (я знаю, ничего нового: P).Изображения и маска в OpenGL ES 2.0
Один из этого фильтра принимает два изображения и маску, и он смешивает два изображения, показывающие их через маску (здесь изображение, чтобы лучше объяснить, что я хочу получить)
В настоящее время Я действительно смущен, и я не знаю, с чего начать создавать этот эффект. Я не могу понять, что мне нужно работать с несколькими текстурами и несколькими FrameBuffers, или я могу просто работать с одним шейдером.
У вас есть подсказка, чтобы помочь мне в этом проекте?
EDIT --------
Я нашел решение, но когда я использую в качестве маски линий вместо кругов результат действительно «шероховатый», особенно если линии вращаются.
precision highp float;
varying vec4 FragColor;
varying highp vec2 TexCoordOut;
uniform sampler2D textureA;
uniform sampler2D textureB;
uniform sampler2D mask;
void main(void){
vec4 mask_color = texture2D(mask, TexCoordOut);
if (mask_color.a > 0.0){
gl_FragColor = texture2D(textureA, TexCoordOut);
}else {
gl_FragColor = texture2D(textureB, TexCoordOut);
}
}
Возможно ли, вероятно, использовать буфер или смешивание трафарета?
Кстати, вам не нужно использовать канал alpha ('mask_color.a') для маски. Вы можете использовать любой другой канал 'r',' g', 'b', и таким образом вы сэкономите память GPU, используя текстуру маски без альфа-канала. – keaukraine
@MatterGoal Может быть, вы можете ответить на этот вопрос, http://stackoverflow.com/questions/24486729/uiimage-masking-with-gesture –