我正在用 Opengl ES 为 iPhone 编写游戏,但遇到了 alpha 混合问题:
我正在使用glBlendFunc(Gl.GL_SRC_ALPHA, Gl.GL_ONE_MINUS_SRC_ALPHA)
实现 alpha 混合并尝试用几个“层”组成一个场景,这样我就可以单独移动它们而不是拥有静态图像。我在 Photoshop 中创建了一个预览,然后尝试在 iphone 中实现相同的结果,但是当我将纹理与半透明区域混合时会显示黑色光晕。
我附上了一张图片。左边是iphone的截图,右边是我在photoshop中构图时的样子。该图像由渐变和带有羽化边缘的沙子图像组成。
这是预期的行为吗?有什么办法可以避免黑边?
谢谢。
编辑:我正在上传包含沙子的 png 部分。完整的 png 为 512x512 并且还有其他图像。
我正在使用以下代码加载图像:
NSString *path = [NSString stringWithUTF8String:filePath];
NSData *texData = [[NSData alloc] initWithContentsOfFile:path];
UIImage *image = [[UIImage alloc] initWithData:texData];
if (image == nil) NSLog(@"ERROR LOADING TEXTURE IMAGE");
GLuint width = CGImageGetWidth(image.CGImage);
GLuint height = CGImageGetHeight(image.CGImage);
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
void *imageData = malloc( height * width * 4 );
CGContextRef context = CGBitmapContextCreate( imageData, width, height, 8, 4 * width, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big );
CGColorSpaceRelease( colorSpace );
CGContextClearRect( context, CGRectMake( 0, 0, width, height ) );
CGContextTranslateCTM( context, 0, height - height );
CGContextDrawImage( context, CGRectMake( 0, 0, width, height ), image.CGImage );
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, imageData);
CGContextRelease(context);
free(imageData);
[image release];
[texData release];