LWJGL:创建一个半透明矩形,然后添加一个带有纹理的Rectangle

时间:2013-08-08 01:51:51

标签: java lwjgl

我试着做标题中描述的内容,到目前为止我的代码是heres但它所做的只是创建带有纹理的rect而不是应该出现在它后面的半透明的:

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();

}

如果有人能告诉我解决方案,我会很高兴。

由于

1 个答案:

答案 0 :(得分: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);