OpenGL淡出/无法正常工作

时间:2012-07-25 15:31:11

标签: java opengl jogl

我正在尝试使用JOGL淡入/淡出图像。我可以渲染图像,但它总是以完全强度渲染。以下是代码:

private void render(GLAutoDrawable glad) {
GL2 gl = glad.getGL().getGL2();

// Prepares the rendering, things such as disabling depth, clearing the buffer bit etc
setUpGL(gl);

BufferedImage background = main.getCurrentState().getImage();
// Render the background, adapted from here: http://bit.ly/QjeusP
renderImage(gl, background, background.getWidth(), background.getHeight());

gl.glEnable(GL2.GL_BLEND);
gl.glBlendFunc(GL2.GL_SRC_ALPHA, GL2.GL_ONE_MINUS_SRC_ALPHA);
gl.glColor4f(0, 0, 0, alpha);
gl.glBegin(GL2.GL_QUADS);
gl.glVertex2f(0, background.getHeight());
gl.glVertex2f(background.getWidth(), background.getHeight());
gl.glVertex2f(background.getWidth(), 0);
gl.glVertex2f(0, 0);
gl.glEnd();
gl.glDisable(GL2.GL_BLEND);
}

变量alpha是一个浮点数,每次渲染递增0.1,如果超过1.0,则递减0.1直到小于0,然后递增,依此类推。

编辑1:这是更新alpha值的代码:

private void update() {
  if (isTransparent) {
    alpha += 0.1f;
    if (alpha >= 1.0f) {
      alpha = 1.0f;
      isTransparent = false;
    }
  }
  else {
    alpha -= 0.1f;
    if (alpha <= 0.0f) {
      alpha = 0.0f;
      isTransparent = true;
    }
  }
}

1 个答案:

答案 0 :(得分:2)

这可能是深度测试问题。我不知道renderImage做了什么,但是如果它只是在z = 0呈现屏幕对齐的纹理四边形,那么当启用深度测试时,渲染它的四边形将不会被渲染,因为它与纹理四边形处于同一深度。因此,在渲染半黑四边形时(和之后glDisable(GL_DEPTH_TEST))尝试glEnable

编辑:愚蠢的想法,但可能是你正在快速更改alpha,以便你最终只有一个恒定的灰色阴影?