今天在执行如下代码时,发现打开的OpenGL窗口在我点击方法窗口时,颜色发生了改变,联想到之前看到的颜色在OpenGL中是一种状态,有所感受。

void display()
{
	glClear(GL_COLOR_BUFFER_BIT);  //清除颜色缓存
	glLineWidth(3.0);//设置线宽为三个像素
	glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); //设置正面和背面都是使用填充图元的绘制方式
	glRectf(-0.5, 0.5, 0.5, -0.5);//绘制矩形
	glColor3f(1.0, 1.0 ,0.0);//设置绘制颜色为黄色
	glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);//设置正面和背面都是使用非填充图元即直线的绘制方式
	glRectf(-0.5, 0.5, 0.5, -0.5);
	glFlush();  //强制执行之前缓存的所有OpenGL命令
}

完整的代码可以参考一个通用完整的OpenGL程序,只需要修改display()函数。

执行之后效果如下:
\"在这里插入图片描述\"
但是当我点击放大再缩小之后:
\"在这里插入图片描述\"
???这是为什么呢,因为我印象中的程序执行完之后就不会再改变了,但是想到了

glutMainLoop();   //使程序进入无限事件处理循环,该函数的调用应作为main函数最后一条语句出现

从这里可以看出回调函数display()被不断地重复执行

而OpenGL中颜色只是一种状态,执行glColor3f(1.0, 1.0 ,0.0);之后颜色就被修改为了黄色,可以理解为画家手中的画笔成了黄色,那么他画出的画就都是黄色的了。
所以只需要稍稍修改程序:

void display()
{
	glClear(GL_COLOR_BUFFER_BIT);  //清除颜色缓存
	glLineWidth(3.0);//设置线宽为三个像素
	
	glColor3f(1.0, 1.0, 1.0);//新加入的代码
	
	glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); //设置正面和背面都是使用填充图元的绘制方式
	glRectf(-0.5, 0.5, 0.5, -0.5);//绘制矩形
	glColor3f(1.0, 1.0 ,0.0);//设置绘制颜色为黄色
	glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);//设置正面和背面都是使用非填充图元即直线的绘制方式
	glRectf(-0.5, 0.5, 0.5, -0.5);
	glFlush();  //强制执行之前缓存的所有OpenGL命令
}

就可以了

收藏 打印