在OpenGL中无法随时间改变颜色

时间:2016-02-09 08:13:02

标签: c++ opengl

我正在使用OpenGL superbible第7版学习OpenGL。但是,当我尝试在第2章中运行该示例时,我发现了一个问题,即颜色不会随着时间的推移而发生变化。

这是主程序:

int main(int argc, char** argv) {
    if (!glfwInit())
    {
        fprintf(stderr, "Failed to initialize GLFW\n");
        return 1;
    }

    GLFWwindow* window;
    window = glfwCreateWindow(800, 600, "My First OpenGL Project", NULL, NULL);
    if (!window)
    {
        fprintf(stderr, "Failed to open window\n");
        return 1;
    }
    glfwMakeContextCurrent(window);

    gl3wInit();

    bool running = true;

    do
    {
        double current_time = glfwGetTime();
        static const GLfloat color[] = {
            (float)sin(current_time) * 0.5f + 0.5f,
            (float)cos(current_time) * 0.5f + 0.5f,
            0.0f,
            1.0f };
        std::cout << current_time << std::endl;
        std::cout << color[0] << std::endl;
        glClearBufferfv(GL_COLOR, 0, color);

        glfwSwapBuffers(window);
        glfwPollEvents();

        running &= (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_RELEASE);
        running &= (glfwWindowShouldClose(window) != GL_TRUE);
    } while (running);

    glfwDestroyWindow(window);
    glfwTerminate();
    return 0;
}

似乎current_time的值随时间而变化,但color [0]的值不是。那是为什么?

1 个答案:

答案 0 :(得分:2)

这是因为静态变量的初始化程序仅在初始化变量时调用一次。 const也是一个很好的暗示,这个变量永远不会改变。

因此,如果您想在每个帧中使用不同的颜色,请删除static const并坚持使用

GLfloat color[] = {
        (float)sin(current_time) * 0.5f + 0.5f,
        (float)cos(current_time) * 0.5f + 0.5f,
        0.0f,
        1.0f };