0

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 は float で、レンダリングごとに 0.1 ずつ増分されます。1.0 を超えると、0 未満になるまで 0.1 ずつ減分され、その後増分されます。

編集 1: アルファ値を更新するコードは次のとおりです。

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;
    }
  }
}
4

1 に答える 1

2

これは深度テストの問題である可能性があります。何が起こるかはわかりませんがrenderImage、画面に合わせてテクスチャ化されたクワッドを でレンダリングするだけの場合、その上にレンダリングするクワッドはz = 0、テクスチャ クワッドと同じ深さであるため、深度テストが有効になっているとレンダリングされません。したがってglDisable(GL_DEPTH_TEST)、ハーフブラックのクワッドをレンダリングしている間(およびglEnableその後)に試してみてください。

編集:愚かな考えですが、最終的に一定の灰色の色合いだけになるように、アルファをそれほど速く変更している可能性がありますか?

于 2012-07-25T15:37:40.737 に答える