Opengl ESでiPhone用のゲームを書いていますが、アルファブレンディングで問題が発生しています。
私はglBlendFunc(Gl.GL_SRC_ALPHA, Gl.GL_ONE_MINUS_SRC_ALPHA)
アルファブレンディングを実現するために使用しており、静止画像の代わりにそれらを別々に移動できるように、いくつかの「レイヤー」でシーンを構成しようとしています。Photoshopでプレビューを作成し、iPhoneでも同じ結果を達成しようとしましたが、テクスチャを半透明の領域とブレンドすると、黒いハローが表示されます。
画像を添付しました。左はiPhoneのスクリーンショット、右はフォトショップで構図を作ったときのスクリーンショットです。この画像は、グラデーションとフェザーエッジのある砂の画像で構成されています。
これは予想される動作ですか?暗い境界線を回避する方法はありますか?
ありがとう。
編集:砂を含む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];