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 使用 Alpha 通道进行混合。

因此,您需要在初始化 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 回答