iphone opengl-es ios5 glkit

iphone - GLKit y agregar tintes a las texturas



opengl-es ios5 (1)

He logrado resolver mi problema y aquí está la solución

-(void)render { if (texture_m != nil) { effect_m.texture2d0.enabled = GL_TRUE; // here you need to env mode to GLKTextureEnvModeModulate rather than GLKTextureEnvModeReplace effect_m.texture2d0.envMode = GLKTextureEnvModeModulate; effect_m.texture2d0.target = GLKTextureTarget2D; effect_m.texture2d0.name = texture_m.name; } // then here I have added the tint colour to the GLKBaseEffect class as constant colour which I imagine replaces the calls to glColor4f for OpenGL1.1 effect_m.useConstantColor = YES; float alphaValue = 0.7; GLKVector4 colour = GLKVector4Make( 0* alphaValue, 1* alphaValue, 1* alphaValue, alphaValue ); effect_m.constantColor = colour; // remember multiplying the alpha value to each colour component [effect_m prepareToDraw]; glClear(GL_COLOR_BUFFER_BIT); GLfloat squareVertices[] = { 50, 50, 150, 50, 50, 150, 150, 150 }; GLfloat squareTexture[] = { 0, 0, 1, 0, 0, 1, 1, 1 }; // glColor4f not necessary // glColor4f( 1, 0, 0, 1 ); glEnableVertexAttribArray(GLKVertexAttribPosition); glEnableVertexAttribArray(GLKVertexAttribTexCoord0); glEnable(GL_BLEND); glBlendFunc( GL_ONE, GL_ONE_MINUS_SRC_ALPHA ); glVertexAttribPointer(GLKVertexAttribPosition, 2, GL_FLOAT, GL_FALSE, 0, squareVertices); glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, 0, squareTexture ); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); glDisable(GL_BLEND); glDisableVertexAttribArray(GLKVertexAttribPosition); glDisableVertexAttribArray(GLKVertexAttribTexCoord0); }

Estoy teniendo problemas para teñir una imagen PNG con GLKit.

Tengo una imagen PNG blanca que cargué en la aplicación y luego la utilizo para crear una textura:

UIImage *image = [ UIImage imageNamed:@"brushImage" ]; NSError *error = nil; texture_m = [[ GLKTextureLoader textureWithCGImage:image.CGImage options:nil error:&error] retain ]; if (error) { NSLog(@"Error loading texture from image: %@",error); }

la textura se crea sin errores

sin embargo, cuando quiero renderizar la textura con blend activado, parece que se ignora el color y obtengo una imagen blanca. No tuve problemas cuando estaba haciendo esto en OpenGL1 donde la imagen captaba el color definido en glColor4f() . Aquí está mi código de renderizado:

-(void)render{ if (texture_m != nil) { effect_m.texture2d0.enabled = GL_TRUE; effect_m.texture2d0.envMode = GLKTextureEnvModeReplace; effect_m.texture2d0.target = GLKTextureTarget2D; effect_m.texture2d0.name = texture_m.name; } [effect_m prepareToDraw]; glClear(GL_COLOR_BUFFER_BIT); GLfloat squareVertices[] = { 50, 50, 150, 50, 50, 150, 150, 150 }; GLfloat squareTexture[] = { 0, 0, 1, 0, 0, 1, 1, 1 }; glColor4f( 1, 0, 0, 1 ); glEnableVertexAttribArray(GLKVertexAttribPosition); glEnableVertexAttribArray(GLKVertexAttribTexCoord0); glEnable(GL_BLEND); glBlendFunc( GL_ONE, GL_ONE_MINUS_SRC_ALPHA ); glVertexAttribPointer(GLKVertexAttribPosition, 2, GL_FLOAT, GL_FALSE, 0, squareVertices); glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, 0, squareTexture ); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); glDisable(GL_BLEND); glDisableVertexAttribArray(GLKVertexAttribPosition); glDisableVertexAttribArray(GLKVertexAttribTexCoord0); }

¿Alguien podría ayudar a resolver este problema? Gracias.

Reza