0

透明なテクスチャを透明にするために、次のように OpenGL を初期化します。

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

私はこのようにテクスチャを描きます:

glPushMatrix();
    //translate
    //neutralize colors
    //bind texture
    //vertex points
glPopMatrix();

しかし、直後にクワッドを描画しようとすると、表示されません:

glPushMatrix();
{
    glTranslatef(x, y, 0);
    glColor3f(1f, 0f, 0f);
    glBegin(GL_QUADS);
    {           
        glVertex2f(0, 0);
        glVertex2f(10, 0);
        glVertex2f(10, 10);
        glVertex2f(0, 10);
    }
    glEnd();
}
glPopMatrix();

上記の初期化を削除すると、クワッドが表示されますが、テクスチャは透明ではなくなります。

ここで何が間違っていますか?

編集:glDisable(GL_BLEND);テクスチャではないものを描画したいときはいつでも呼び出す必要がありますか?

4

2 に答える 2

1

クワッドを描画する前に、ブレンドを無効にする必要があります。

編集:もっとコードを投稿できますか? たとえば、四角形を描画する前にテクスチャを無効にしていない場合など、問題は別の場所にある可能性があります。

于 2013-05-09T17:13:45.433 に答える
-1

描画時にブレンドを無効にする必要はありません。

glBlendFunc(GL_SRC_ALPHA, GL_ONE)透明な立方体 (テクスチャ付き) を描画する必要があるときに呼び出します。

通常、ブレンド モードを有効にして描画するときは、DEPTH テストを無効にします。

    glEnable(GL_BLEND);                // Turn Blending On
    glDisable(GL_DEPTH_TEST);          // Turn Depth Testing Off

NeHeにはブレンディングに関する素晴らしいチュートリアルがあります。

于 2013-05-09T17:24:23.280 に答える