0

テクスチャ パイプラインを JPEG で動作させるのに問題があります。PNG ではすべてが正常に機能しますが、変換が問題でした。

UIImage と CGBitmapContextCreate を介して画像データを読み込んでいます

UIImage* tI = [UIImage imageWithContentsOfFile:fileName];
Image = tI.CGImage;

mWidth = CGImageGetWidth(Image);
mHeight = CGImageGetHeight(Image);

mData = new uint8[mWidth * mHeight * 4];

Context = CGBitmapContextCreate(mData, mWidth, mHeight, CGImageGetBitsPerComponent(Image), CGImageGetBytesPerRow(Image), 
                                CGImageGetColorSpace(Image), 
                                CGImageGetBitmapInfo(Image));

CGContextDrawImage(Context, CGRectMake(0.0, 0.0, float(mWidth), float(mHeight)), Image);
CGContextRelease(Context);

次に、呼び出しでGLTextureをセットアップします...

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, texture->Width(), texture->Height(), 0, GL_RGB, GL_UNSIGNED_BYTE, texture->Data());

この glTexImage2D 呼び出しが問題だと思われます。私はさまざまな組み合わせを使用して、物事を機能させようとしました。アルファの BitmapInfo 状態は「kCGImageAlphaNoneSkipLast」であるため、RGBA と GL_UNSIGNED_SHORT_5_5_5_1 を使用する必要があるかどうかはわかりませんが、これまでに試した組み合わせはありません。一番近かったのは…

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texture->Width(), texture->Height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, texture->Data());

これにより、テクスチャが非常に吹き飛ばされました(色のエッジは識別できましたが、すべてが明るすぎました)

どんな助けでも素晴らしいでしょう。PNGよりもスペースを節約するためにJPEGを使用しています。

4

1 に答える 1

1

mData バッファが大きすぎます。JPEG 画像はアルファをサポートしていないため、通常、PNG では 4 つ (RGBA) を使用するのに対し、1 ピクセル (RGB) あたり 3 つのコンポーネントしかありません。

于 2011-05-16T19:13:54.960 に答える