OpenGL 淡入/淡出 texture2D

OpenGL Fade in / fade out a texture2D

我正在编写一个应用程序来显示在 OpenGL 中存储为 Texture2D (RGB) 的 .jpg 文件。我想通过淡入黑色,然后淡入下一个纹理,从一个 texture2D 平滑地更改为下一个 texture2D。

在寻找一些解释后,我写了这样的东西。

void renderTexture()
{
  glMatrixMode(GL_MODELVIEW);

  glEnable(GL_TEXTURE_2D);
  glBindTexture(GL_TEXTURE_2D, mTexture);

  gluSphere(mQuad, 1.0f, 50, 50);

  glBindTexture(GL_TEXTURE_2D, 0);
}

void fadeToBlack()
{
  glEnable(GL_BLEND);
  glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

  for (GLfloat alpha = 1.0; alpha > 0.0; alpha -= 0.05)
  {
    glColor4f(0.0, 0.0, 0.0, alpha);
    renderTexture();

    glFlush();
    glutSwapBuffers();
  }

  glDisable(GL_BLEND);
}

不幸的是,这不会褪色为黑色,而是立即切换为黑色。我一定对 GL_BLEND 在这里的工作方式有一些误解。有人可以指出我做错了什么吗?

** 编辑:这成功了。非常感谢 j-p 和 Benjamin 的指点**

void fadeToBlack()
{
  for (GLfloat alpha = 1.0; alpha > 0.0; alpha -= 0.001)
  {
    renderTexture();
    glColor4f(alpha, alpha, alpha, alpha);

    glFlush();
    glutSwapBuffers();
  }
  glColor4f(1.0, 1.0, 1.0, 1.0);
}

for 循环的执行速度如此之快,以至于纹理更改似乎会立即发生。