0

タイトルで説明されていることを実行しようとしていますが、これまでのコードは次のとおりですが、テクスチャを使用して四角形を作成するだけで、その背後に表示される半透明のものは作成されません。

public static void draw(){




glPushMatrix();
Game.res.pauseTexture.bind();


GL11.glColor4f(0,0, 0 , 0.5F);

glBegin(GL11.GL_QUADS);
{


    glVertex2f(0, 0);



    glVertex2f(Game.WINX,0 );


    glVertex2f(Game.WINX, Game.WINY);


    glVertex2f(0, Game.WINY);
}

glEnd();
GL11.glColor3f(1,1, 1);

GL11.glTranslatef(Game.WINX/2 - 250, Game.WINY/2 - 350, 0);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);


glBegin(GL11.GL_QUADS);
{

    glTexCoord2f(0, 0);
    glVertex2f(0, 0);


    glTexCoord2f(Game.res.pauseTexture.getWidth(), 0);
    glVertex2f(500,0 );

    glTexCoord2f(Game.res.pauseTexture.getWidth(), Game.res.pauseTexture.getHeight());
    glVertex2f(500, 700);

    glTexCoord2f(0, Game.res.pauseTexture.getHeight());
    glVertex2f(0, 700);
}
glEnd();
glPopMatrix();

}

どなたか解決策を教えていただけると幸いです。

ありがとう

4

1 に答える 1

0

あなたの質問が正しく理解できれば、ブレンドを有効にして、アルファ チャネルを使用してブレンドするように OpenGL に指示する必要があります。

そのため、OpenGL の状態を初期化する場所に次を追加する必要があります。もちろん、レンダリング ループ自体に追加することもできますが、OpenGL 呼び出しの使用は少ない方がよいでしょう。

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

透明度/不透明度の影響を受けたくないものがいくつかある場合は、ブレンドを無効にする必要があります。

glDisable(GL_BLEND);
... render stuff ...
glEnable(GL_BLEND);
... render stuff ...

異なるクラスを静的にインポートしない場合、ここに同じコードがありますが、そのクラスがあります。

GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
...
GL11.glDisable(GL11.GL_BLEND);
于 2013-08-08T09:09:32.427 に答える