我正在使用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]的值不是。那是为什么?
答案 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 };