4

私はPNGテクスチャをロードしています:

void Sprite::setTexture(string f) {
    SDL_Surface *image = IMG_Load(f.c_str());
    if (image == NULL) {
        this->texture = -1;
        return;
    }
    SDL_DisplayFormatAlpha(image);
    unsigned object(0);
    glGenTextures(1, &object);
    glBindTexture(GL_TEXTURE_2D, object);
    glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE);
    glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP_TO_EDGE);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image->w, image->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, image->pixels);
    SDL_FreeSurface(image);
    this->texture = object;
}

唯一の問題は、次のようになるのではなく (Photoshop で表示):

オリジナルボックス

次のように表示されます (アプリで表示):

どうしたの?GL_RGBA で少し遊んでみて、GL_BGRA に反転するか、GL_RGBA8、GL_RGBA16 に変更しようとしましたが、何も変わりませんでした (実際には GL_BGRA は何も表示しませんでした)。この小さなPNGでも、境界線の半径は4pxであるため、画像の角度は透明です。アルファチャンネルが必要です。

私は何を間違っていますか? アプリボックス

4

1 に答える 1

2

チャンネルが反転しているように見えます。アルファが適切に機能しているかどうかをここから確認するのは難しいですが、一部のテクスチャはARGB.

実際には、データを検証するためだけに、

SDL_Surface *image

とが何image->format->Rmask Gmask BmaskAmaskあるかを確認してください。このようにして、サーフェスの形式を確認できます。

于 2012-12-02T03:46:14.083 に答える