openGL ES-Texturen aus PNGs mit Transparenz werden mit seltsamen Artefakten gerendert und machen mich verrückt!

Ich fange an, an meiner ersten OpenGL-iPhone-App zu arbeiten, habe aber einen frühen Haken bekommen.

Ich habe eine SEHR EINFACHE kleine Textur, die ich als Sprite in einem 2D-Spiel verwenden möchte, aber sie wird mit seltsamen "zufällig" gefärbten Pixeln oben dargestellt.

http://i40.tinypic.com/2s7c9ro.png <- Screenshot hier

Ich habe irgendwie das Gefühl, dass dies Photoshop schuld ist. Wenn also jemand etwas dagegen hat, lass es mich bitte wissen.

Wenn es nicht Photoshop ist, dann muss es mein Code sein ... Also hier ist der fragliche Code ...

- (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);

}

Diese Mischfunktion ergab die besten Ergebnisse.

Bitte lassen Sie mich wissen, was Ihrer Meinung nach falsch ist.

Vielen Dank, dieses Problem hat mich verrückt gemacht.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage