Las texturas de openGL ES de PNG con transparencia se representan con artefactos extraños y me vuelven loco.

Estoy empezando a trabajar en mi primera aplicación de iPhone OpenGL, pero he tenido un problema prematuro.

Tengo una textura MUY SENCILLA que quiero usar como sprite en un juego en 2D, pero se representa con píxeles de colores aleatorios extraños en la parte superior.

http://i40.tinypic.com/2s7c9ro.png <- Captura de pantalla aquí

Me da la sensación de que esto es culpa de Photoshop, así que si alguien tiene algo al respecto, hágamelo saber.

Si no es Photoshop, entonces debe ser mi código ... Así que aquí está el código en cuestión ...

- (void)loadTexture {

CGImageRef textureImage = [UIImage imageNamed:@"zombie0.png"].CGImage;

if (textureImage == nil) {
    NSLog(@"Failed to load texture image");
    return;
}

NSInteger texWidth = CGImageGetWidth(textureImage);
NSInteger texHeight = CGImageGetHeight(textureImage);

GLubyte *textureData = (GLubyte *)malloc(texWidth * texHeight * 4);

CGContextRef textureContext = CGBitmapContextCreate(textureData, texWidth, texHeight, 8, texWidth * 4, CGImageGetColorSpace(textureImage), kCGImageAlphaPremultipliedLast);

CGContextDrawImage(textureContext, CGRectMake(0.0, 0.0, (float)texWidth, (float)texHeight), textureImage);

CGContextRelease(textureContext);

glGenTextures(1, &textures[0]);

glBindTexture(GL_TEXTURE_2D, textures[0]);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texWidth, texHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, textureData);

free(textureData);

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

glEnable(GL_TEXTURE_2D);

glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

}

Esta función de mezcla dio los mejores resultados.

Por favor, déjame saber qué piensas que está mal.

Muchas gracias, este problema me ha vuelto loco.

Respuestas a la pregunta(3)

Su respuesta a la pregunta