使用opengl绘制一只3D旋转小猫
时间: 2023-06-23 11:09:19 浏览: 70
以下是使用OpenGL绘制一只3D旋转小猫的代码:
```c++
#include <GL/glut.h>
GLfloat angle = 0.0;
// 绘制小猫
void drawCat() {
// 身体
glColor3f(0.6, 0.4, 0.2);
glutSolidSphere(0.5, 20, 20);
// 头部
glPushMatrix();
glTranslatef(0.0, 0.6, 0.0);
glColor3f(0.8, 0.6, 0.4);
glutSolidSphere(0.3, 20, 20);
// 眼睛
glPushMatrix();
glTranslatef(-0.1, 0.1, 0.2);
glColor3f(0.0, 0.0, 0.0);
glutSolidSphere(0.05, 10, 10);
glTranslatef(0.2, 0.0, 0.0);
glutSolidSphere(0.05, 10, 10);
glPopMatrix();
// 嘴巴
glTranslatef(0.0, -0.2, 0.2);
glColor3f(0.0, 0.0, 0.0);
glutSolidCone(0.1, 0.3, 10, 10);
glPopMatrix();
}
// 绘制场景
void display() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
glRotatef(angle, 0.0, 1.0, 0.0);
drawCat();
glutSwapBuffers();
}
// 定时器
void timer(int value) {
angle += 5.0;
if (angle > 360.0) {
angle -= 360.0;
}
glutPostRedisplay();
glutTimerFunc(16, timer, 0);
}
int main(int argc, char *argv[]) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(800, 600);
glutCreateWindow("3D Rotating Cat");
glEnable(GL_DEPTH_TEST);
glutDisplayFunc(display);
glutTimerFunc(0, timer, 0);
glutMainLoop();
return 0;
}
```
解释一下代码:
首先,在 `drawCat()` 函数中绘制了小猫的各个部分,包括身体、头部、眼睛和嘴巴。
然后,在 `display()` 函数中,我们使用 `glRotatef()` 函数来实现旋转,以 `angle` 变量为旋转角度,围绕 Y 轴旋转。在 `timer()` 函数中,我们每隔一定时间更新 `angle` 变量的值,并在更新后调用 `glutPostRedisplay()` 函数来重新绘制场景。
最后,在 `main()` 函数中,我们使用 GLUT 库来创建窗口,并设置显示模式、窗口大小和窗口标题等参数。我们还启用了深度测试,以便正确绘制具有深度的 3D 场景。然后,我们注册了 `display()` 函数和 `timer()` 函数,并在 `timer()` 函数中启动定时器。最后,我们使用 `glutMainLoop()` 函数进入 GLUT 主循环,等待用户操作或事件发生。