用opengl绘制一个旋转的五棱锥
时间: 2024-05-07 12:18:36 浏览: 10
好的,以下是基于OpenGL的五棱锥绘制代码,实现旋转效果:
```c++
#include <GL/glut.h>
#include <cmath>
// 角度值(全局变量)
GLfloat angle = 0.0f;
void init() {
glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // 背景颜色为黑色
}
void display() {
glClear(GL_COLOR_BUFFER_BIT); // 清除颜色缓存
// 设置视角(透视投影)
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0f, 1.0f, 1.0f, 100.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0f, 0.0f, 5.0f, // 视点
0.0f, 0.0f, 0.0f, // 观察点
0.0f, 1.0f, 0.0f); // 上方向
// 绘制五棱锥
glPushMatrix();
glRotatef(angle, 0.0f, 1.0f, 0.0f); // 绕 Y 轴旋转
glBegin(GL_TRIANGLES);
glColor3f(1.0f, 0.0f, 0.0f); // 红色
glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(1.0f, -1.0f, 1.0f);
glVertex3f(-1.0f, -1.0f, 1.0f);
glColor3f(0.0f, 1.0f, 0.0f); // 绿色
glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(1.0f, -1.0f, -1.0f);
glVertex3f(1.0f, -1.0f, 1.0f);
glColor3f(0.0f, 0.0f, 1.0f); // 蓝色
glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(-1.0f, -1.0f, -1.0f);
glVertex3f(1.0f, -1.0f, -1.0f);
glColor3f(1.0f, 1.0f, 0.0f); // 黄色
glVertex3f(0.0f, 1.0f, 0.0f);
glVertex3f(-1.0f, -1.0f, 1.0f);
glVertex3f(-1.0f, -1.0f, -1.0f);
glEnd();
glBegin(GL_QUADS);
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();
glPopMatrix();
glutSwapBuffers(); // 双缓冲
}
void update(int value) {
angle += 1.0f;
if (angle > 360.0f) {
angle = angle - 360.0f;
}
glutPostRedisplay(); // 重绘窗口
glutTimerFunc(25, update, 0); // 25ms 后调用 update 函数
}
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE);
glutInitWindowSize(500, 500);
glutInitWindowPosition(100, 100);
glutCreateWindow("Rotating Pyramid");
init();
glutDisplayFunc(display);
glutTimerFunc(25, update, 0); // 25ms 后调用 update 函数
glutMainLoop();
return 0;
}
```
在这份代码中,我们使用了OpenGL的一些基本函数来绘制一个五棱锥,并实现了旋转效果。具体来说,我们使用`glRotatef()`函数来控制旋转角度,`gluPerspective()`函数设置视角,`gluLookAt()`函数设置视点和观察点,`glutTimerFunc()`函数来控制动画帧率。