我正在编写一个显示.jpg文件的应用程序,这些文件在OpenGL中存储为Texture2D(RGB)。我希望通过淡化为黑色,然后逐渐淡入下一个纹理,从一个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);
}
答案 0 :(得分:1)
for循环执行速度很快,纹理变化会立即发生。