Puedo mezclar dos texturas con diferentes modos de fusión en el sombreador de fragmentos cuando ambas texturas cubren los mismos rectángulos. Pero ahora mi problema es que una textura es un rectángulo simple sin rotación y la otra textura es otro rectángulo con rotación/escala y traslación. ¿Cómo combino estas texturas de la manera que quiero? (En la foto)¿Cómo puedo combinar dos texturas con diferentes coordenadas en OpenGL ES 2.0 en iPhone?
sé cómo hacer esto ...
Pero no está seguro de cómo hacer esto ...
Por mezcla de texturas en un rectángulo (la primera imagen), utilicé el siguiente código ...
Código de objetivo C ...
- (void) display {
[EAGLContext setCurrentContext:context];
glBindFramebuffer(GL_FRAMEBUFFER, targetFBO);
glUseProgram(program);
glActiveTexture(GL_TEXTURE2);
glBindTexture(GL_TEXTURE_2D, textureTop);
glActiveTexture(GL_TEXTURE3);
glBindTexture(GL_TEXTURE_2D, textureBot);
glUniform1i(inputTextureTop, 2);
glUniform1i(inputTextureBot, 3);
glUniform1f(alphaTop, alpha);
glEnable (GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glVertexAttribPointer(position, 2, GL_FLOAT, 0, 0, imageVertices);
glVertexAttribPointer(inputTextureCoordinate, 2, GL_FLOAT, 0, 0, textureCoordinates);
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glBindRenderbuffer(GL_RENDERBUFFER, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER];
}
Vertex Shader ...
attribute vec4 position;
attribute vec4 inputTextureCoordinate;
varying vec2 textureCoordinate;
void main()
{
gl_Position = position;
textureCoordinate = inputTextureCoordinate.xy;
}
Fragmento de sombreado ...
varying highp vec2 textureCoordinate;
uniform sampler2D inputTextureTop;
uniform sampler2D inputTextureBot;
uniform highp float alphaTop;
void main()
{
lowp vec4 pixelTop = texture2D(inputTextureTop, textureCoordinate);
lowp vec4 pixelBot = texture2D(inputTextureBot, textureCoordinate);
gl_FragColor = someBlendOperation(pixelTop, pixelBot);
}
Puede ser que pueda hacer alguna operación geométrica en el sombreador de fragmentos para obtener el XY del píxel superior. – abix
Hola, estoy teniendo el mismo problema, la solución @Max no tiene sentido para lidiar con la necesidad de dibujar la imagen superior con un tamaño y rotación diferente a la imagen de fondo, ¿cómo lo logró? – Eyal