使用OpenGL 显示一个进度条由0到100的动态变化过程
时间: 2024-05-12 10:16:29 浏览: 86
以下是使用OpenGL显示进度条由0到100动态变化的示例代码:
```
#include <GL/glut.h>
// 定义进度条的初始值
int progress = 0;
// 定义窗口大小
int windowWidth = 400;
int windowHeight = 400;
// 定义进度条的宽度和高度
int barWidth = 300;
int barHeight = 20;
void display()
{
// 清空颜色缓冲区
glClear(GL_COLOR_BUFFER_BIT);
// 设置绘制颜色为绿色
glColor3f(0.0, 1.0, 0.0);
// 绘制进度条背景
glBegin(GL_QUADS);
glVertex2f((windowWidth - barWidth) / 2, windowHeight / 2 - barHeight / 2);
glVertex2f((windowWidth + barWidth) / 2, windowHeight / 2 - barHeight / 2);
glVertex2f((windowWidth + barWidth) / 2, windowHeight / 2 + barHeight / 2);
glVertex2f((windowWidth - barWidth) / 2, windowHeight / 2 + barHeight / 2);
glEnd();
// 设置绘制颜色为蓝色
glColor3f(0.0, 0.0, 1.0);
// 绘制进度条
glBegin(GL_QUADS);
glVertex2f((windowWidth - barWidth) / 2, windowHeight / 2 - barHeight / 2);
glVertex2f((windowWidth - barWidth) / 2 + progress / 100.0 * barWidth, windowHeight / 2 - barHeight / 2);
glVertex2f((windowWidth - barWidth) / 2 + progress / 100.0 * barWidth, windowHeight / 2 + barHeight / 2);
glVertex2f((windowWidth - barWidth) / 2, windowHeight / 2 + barHeight / 2);
glEnd();
// 刷新窗口
glutSwapBuffers();
}
void timer(int value)
{
// 更新进度条的值
progress++;
// 如果进度条的值超过了100,重置为0
if (progress > 100) {
progress = 0;
}
// 重新绘制窗口
glutPostRedisplay();
// 设置定时器,每100毫秒更新一次进度条
glutTimerFunc(100, timer, 0);
}
int main(int argc, char** argv)
{
// 初始化OpenGL
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(windowWidth, windowHeight);
glutCreateWindow("OpenGL Progress Bar");
// 设置背景颜色为白色
glClearColor(1.0, 1.0, 1.0, 1.0);
// 设置视口
glViewport(0, 0, windowWidth, windowHeight);
// 设置投影矩阵
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, windowWidth, 0, windowHeight);
// 设置模型矩阵
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// 注册回调函数
glutDisplayFunc(display);
glutTimerFunc(100, timer, 0);
// 进入主循环
glutMainLoop();
return 0;
}
```
运行代码后,会打开一个窗口并显示进度条,进度条的值会每100毫秒自动增加1,当进度条的值达到100时会重新从0开始。
阅读全文