3

アルファチャンネルで画像を使用するにはどうすればよいですか? 今から私はこれを試しました:

glTexImage2D(GL_TEXTURE_2D,
             0,
             GL_RGBA,
             width, height,
             0,      
             GL_BGRA,
             GL_UNSIGNED_BYTE,
             bits);

このopenglコマンドで:

glBindTexture(GL_TEXTURE_2D, texgun5);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glColor3f(1.0f, 1.0f, 1.0f);
glEnable (GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glBegin(GL_QUADS);
        glTexCoord2f(0.0, 0.0);
        glVertex3f(gun5[0], gun5[1], gun5[2]);
        glTexCoord2f(1.0, 0.0);
        glVertex3f(gun5[3], gun5[4], gun5[5]);
        glTexCoord2f(1.0, 1.0);
        glVertex3f(gun5[6], gun5[7], gun5[8]);
        glTexCoord2f(0.0, 1.0);
        glVertex3f(gun5[9], gun5[10], gun5[11]);
    glEnd();
glDisable(GL_BLEND);

Freeimage で読み込まれた png 画像を使用していますが、透過ピクセルはすべて黒です。エラーはどこにありますか?

4

3 に答える 3

1

テクスチャ環境でブレンディングを指定するのを忘れていたと思います。glTexParameteri 呼び出しの直後にこれを挿入します。

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
于 2013-01-25T09:49:09.073 に答える
0

指定した色が白であるため、透明ピクセルは白です。フォーマットのGL_DECAL参照によると、ここで適用されている式は次のとおりです。テクスチャが完全に透明になると、クワッド(白)の色と同じ最終的な色の値になります。RGBACp * (1- As) + Cs*AsAs0Cp

この場合、クワッドのアルファをゼロに設定する必要があると思います。glColor4f(1.0f, 1.0f, 1.0f, 0.0f)

于 2013-01-25T20:05:28.660 に答える