opengl绘制立方体并旋转
时间: 2023-08-25 15:05:37 浏览: 127
opengl_实现三维形体_旋转立方
下面是一份使用OpenGL绘制立方体并旋转的代码示例:
```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, -6.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(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);
// 下面
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);
glEnd();
// 使旋转动画更流畅
angle += 0.2f;
glutSwapBuffers(); // 双缓冲交换
}
void reshape(int w, int h) {
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION); // 切换到投影矩阵
glLoadIdentity(); // 重置当前的投影矩阵
gluPerspective(60.0f, (GLfloat)w / (GLfloat)h, 0.1f, 100.0f); // 设置透视投影
glMatrixMode(GL_MODELVIEW); // 切换到模型视图矩阵
glLoadIdentity(); // 重置当前的模型视图矩阵
}
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
glutInitWindowSize(800, 600);
glutCreateWindow("OpenGL Cube");
glutDisplayFunc(display); // 注册显示回调函数
glutReshapeFunc(reshape); // 注册窗口大小改变回调函数
glEnable(GL_DEPTH_TEST); // 启用深度测试
glutMainLoop();
return 0;
}
```
运行代码后,可以看到一个旋转的彩色立方体。可以通过修改 `glRotatef` 函数中的参数来改变旋转方向和速度。
阅读全文