Uczę się OpenGL ES 2.0 i chciałbym stworzyć aplikację, aby lepiej zrozumieć, jak to działa. Aplikacja ma zestaw filtrów, które użytkownik może zastosować do obrazów (wiem, nic nowego: P).Obrazy i maska w OpenGL ES 2.0
Jednym z tego filtra trwa dwa obrazy i maskę i miesza dwa obrazy przedstawiające ich przez maskę (tu obraz, aby lepiej wyjaśnić, co chcę uzyskać)
W tej chwili Jestem bardzo zdezorientowany i nie wiem, gdzie zacząć tworzyć ten efekt. Nie mogę zrozumieć, że mam do czynienia z wieloma teksturami i wieloma FrameBufferami lub po prostu mogę pracować z jednym shaderem.
Czy masz jakąś wskazówkę, aby pomóc mi w wykonaniu tego projektu?
EDIT --------
Znalazłem ten roztwór, ale kiedy używać jako linie maski zamiast kół wynik jest naprawdę „grungy”, zwłaszcza jeśli linie są obracane.
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);
}
}
Czy lepiej używać bufora szablonu lub mieszania?
BTW, nie musisz używać kanału alfa ('mask_color.a') do maskowania. Możesz użyć dowolnego innego kanału 'r',' g', 'b' iw ten sposób zaoszczędzisz pamięć GPU używając tekstury maskującej bez kanału alfa. – keaukraine
@MatterGoal Może odpowiedzieć na to pytanie: http://stackoverflow.com/questions/24486729/uiimage-masking-with-gesture –