我试着做标题中描述的内容,到目前为止我的代码是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();
}
如果有人能告诉我解决方案,我会很高兴。
由于
答案 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);