0

緑の背景に透明な背景を持つスプライトを表示する簡単なコードを書いています。今、スプライトに問題があります。メインの背景には背景がなくても表示されるはずですが、色付きの背景があります (色を変更できるのでバグではありません)。

私には思えますが、問題は、テクスチャが色付きのクワッドにマップされると、すべてのアルファ値がクワッドの色の値と同じに設定されることです。

  1. PNG画像は問題なく、透明な背景を持っています
  2. テクスチャの背後にある色を判断できるので、インポートの問題ではないアルファチャンネルで画像を移植します
  3. クワッドブレンド全体がOKだから、私のブレンディングは大丈夫なはずです

ここに私のテクスチャとブレンディングコード:

//Texture Configuration
    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
    glGenTextures(10, texNo);
    glBindTexture(GL_TEXTURE_2D, texNo[0]);
    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL );
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);    
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);    
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );  
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );      
    glEnable(GL_TEXTURE_2D);

    sfTexture[0].loadFromFile("image.png");
    sf::Texture::bind(&sfTexture[0]);


    //Blending
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

そして私の描画コード:

glBegin(GL_QUADS);

        glColor3f(0,1,0);
        glVertex2d(0,0);
        glVertex2d(220,0);
        glVertex2d(220,300);
        glVertex2d(0,300);


        glColor4f(1, 0, 0, 1);
        glBindTexture(GL_TEXTURE_2D, texNo[0]);
        glTexCoord2f(0,1); glVertex2d(xpos+0,ypos+0);
        glTexCoord2f(1,1); glVertex2d(xpos+30,ypos+0);
        glTexCoord2f(1,0); glVertex2d(xpos+30,ypos+30);
        glTexCoord2f(0,0); glVertex2d(xpos+0,ypos+30);
        //glDisable(GL_BLEND);

    glEnd();

更新: GL_DECAL の代わりに GL_MODULATE を試しました

ブレンドなしの GL_MODULATE を使用した画像: ブレンド なしの GL_MODULATE

GL_MODULATE をブレンドした画像: GL_MODULATE をブレンドした画像

4

1 に答える 1