写一个opengldemo
时间: 2024-01-20 09:03:48 浏览: 102
好的,这里提供一个简单的 OpenGL Demo,它可以创建一个窗口并在窗口中绘制一个旋转的立方体。
```c++
#include <GL/glut.h>
GLfloat angle = 0.0f; // 立方体旋转角度
void display() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 清空颜色和深度缓冲区
glLoadIdentity(); // 重置模型视图矩阵
glTranslatef(0.0f, 0.0f, -5.0f); // 将视点移入屏幕内
glRotatef(angle, 1.0f, 1.0f, 1.0f); // 绕 x,y,z 轴旋转立方体
glBegin(GL_QUADS); // 开始绘制四边形
// 绘制立方体的六个面
glColor3f(1.0f, 0.0f, 0.0f); // 红色
glVertex3f( 1.0f, 1.0f,-1.0f);
glVertex3f(-1.0f, 1.0f,-1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f( 1.0f, 1.0f, 1.0f);
glColor3f(0.0f, 1.0f, 0.0f); // 绿色
glVertex3f( 1.0f,-1.0f, 1.0f);
glVertex3f(-1.0f,-1.0f, 1.0f);
glVertex3f(-1.0f,-1.0f,-1.0f);
glVertex3f( 1.0f,-1.0f,-1.0f);
glColor3f(0.0f, 0.0f, 1.0f); // 蓝色
glVertex3f( 1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f,-1.0f, 1.0f);
glVertex3f( 1.0f,-1.0f, 1.0f);
glColor3f(1.0f, 1.0f, 0.0f); // 黄色
glVertex3f( 1.0f,-1.0f,-1.0f);
glVertex3f(-1.0f,-1.0f,-1.0f);
glVertex3f(-1.0f, 1.0f,-1.0f);
glVertex3f( 1.0f, 1.0f,-1.0f);
glColor3f(0.0f, 1.0f, 1.0f); // 青色
glVertex3f(-1.0f, 1.0f, 1.0f);
glVertex3f(-1.0f, 1.0f,-1.0f);
glVertex3f(-1.0f,-1.0f,-1.0f);
glVertex3f(-1.0f,-1.0f, 1.0f);
glColor3f(1.0f, 0.0f, 1.0f); // 粉色
glVertex3f( 1.0f, 1.0f,-1.0f);
glVertex3f( 1.0f, 1.0f, 1.0f);
glVertex3f( 1.0f,-1.0f, 1.0f);
glVertex3f( 1.0f,-1.0f,-1.0f);
glEnd(); // 结束绘制
glutSwapBuffers(); // 切换双缓冲区
}
void idle() {
angle += 0.5f; // 增加旋转角度
if(angle >= 360.0f) angle -= 360.0f; // 循环旋转
glutPostRedisplay(); // 重绘窗口
}
void reshape(int width, int height) {
glViewport(0, 0, width, height); // 设置视口
glMatrixMode(GL_PROJECTION); // 选择投影矩阵
glLoadIdentity(); // 重置投影矩阵
gluPerspective(45.0f, (GLfloat)width / (GLfloat)height, 0.1f, 100.0f); // 设置透视投影
glMatrixMode(GL_MODELVIEW); // 选择模型视图矩阵
}
int main(int argc, char *argv[]) {
glutInit(&argc, argv); // 初始化 GLUT 库
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); // 设置双缓冲、RGB 颜色模式和深度缓冲区
glutInitWindowSize(640, 480); // 设置窗口大小
glutCreateWindow("OpenGL Demo"); // 创建窗口
glutDisplayFunc(display); // 注册显示回调函数
glutIdleFunc(idle); // 注册空闲回调函数
glutReshapeFunc(reshape); // 注册窗口调整回调函数
glEnable(GL_DEPTH_TEST); // 启用深度测试
glutMainLoop(); // 进入主循环
return 0;
}
```
这个 Demo 主要使用了 OpenGL 的基本绘制函数和变换函数,通过不断更新旋转角度实现立方体的旋转效果。可以通过键盘、鼠标等方式增加交互性,实现更多的功能。