を適用します。私はいずれかの色に関係なく、すべてのピクセルをカラーキーイングするか、カラーキー何もしません。私はいろいろなことを試みましたが、どれもうまくいかないようです。ブリットSDL_Surfaceに、私は(NPOT-> POTように)パディングとOpenGLのテクスチャにSDL_Surfaceにロードし、その後、表面上のカラーキーを適用したいカラーキー
ここに私のコードの作業抜粋です。私はカラーキー(範囲[0-1])用のカスタムカラークラスを使用します。オンラインで見つけるSDL + OpenGLのテクスチャロードコードに似たコードを使用して、私はpaddedImageからOpenGLのテクスチャを生成し、その後
// Create an empty surface with the same settings as the original image
SDL_Surface* paddedImage = SDL_CreateRGBSurface(image->flags, width, height,
image->format->BitsPerPixel,
#if SDL_BYTEORDER == SDL_BIG_ENDIAN
0xff000000,
0x00ff0000,
0x0000ff00,
0x000000ff
#else
0x000000ff,
0x0000ff00,
0x00ff0000,
0xff000000
#endif
);
// Map RGBA color to pixel format value
Uint32 colorKeyPixelFormat = SDL_MapRGBA(paddedImage->format,
static_cast<Uint8>(colorKey.R * 255),
static_cast<Uint8>(colorKey.G * 255),
static_cast<Uint8>(colorKey.B * 255),
static_cast<Uint8>(colorKey.A * 255));
SDL_FillRect(paddedImage, NULL, colorKeyPixelFormat);
// Blit the image onto the padded image
SDL_BlitSurface(image, NULL, paddedImage, NULL);
SDL_SetColorKey(paddedImage, SDL_SRCCOLORKEY, colorKeyPixelFormat);
(I」必要に応じて投稿する)。このコードは、パディングの有無にかかわらずテクスチャを必要とし、問題ではないと思われる場合に機能します。
私は私が言及した最初の問題が発生するアルファゼロを持つようにpaddedImage内のすべてのピクセルを設定することを実現するが、私はこれを行う方法を見つけ出すように見えることはできません。私は単にピクセルをループし、適切な色をアルファゼロに設定する必要がありますか?
部分的な解決策:
- カラーキー
- とpaddedImageは、画像(SDL_Surfaceに*)ピクセルをコピー手動で "いつものように"
- をテクスチャを生成SDL_FillRect
- 上記のようpaddedImageを作成します。 paddedImage(OGLテクスチャ)
のThへほとんどの場合、画像が3つの色成分(すなわち、アルファチャンネルなし)。私は今それを4つのカラーコンポーネントに変換することで修正しようとしています
あなたは 'SDL_SetColorKey()'を呼び出していますか? –
はい、申し訳ありませんが、私はそれを私のコードに含めるのを忘れていました。私はそれが私のやり方だと信じていますが、私は今家にいません。私は必要に応じてすぐに編集します。 – NordCoder
あなたは 'SDL_SetColorKey()'前ブリット呼び出す必要があります。それは暗黙のキャストによりカバーされているためまた、あなたは 'static_castをを()'は必要ありません。私はあなたがここにいるものと何か他のものがあるとは思わない。 –