OpenGL绘制旋转的风车
时间: 2024-05-13 20:15:33 浏览: 61
旋转的风车
下面是使用OpenGL绘制旋转的风车的示例代码:
```c++
#include <GL/glut.h>
void init(void)
{
glClearColor(1.0, 1.0, 1.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-5.0, 5.0, -5.0, 5.0);
}
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPushMatrix();
glRotatef(45.0, 0.0, 0.0, 1.0);
// 绘制旋转的风车
glBegin(GL_LINES);
glVertex2f(0.0, 0.0);
glVertex2f(0.0, 2.0);
glEnd();
glBegin(GL_TRIANGLES);
glVertex2f(0.0, 2.0);
glVertex2f(0.5, 1.5);
glVertex2f(-0.5, 1.5);
glEnd();
glBegin(GL_QUADS);
glVertex2f(-0.5, 1.5);
glVertex2f(0.5, 1.5);
glVertex2f(0.5, 1.0);
glVertex2f(-0.5, 1.0);
glEnd();
glPopMatrix();
glutSwapBuffers();
}
void idle(void)
{
static float angle = 0.0;
angle += 0.1;
if (angle >= 360.0) {
angle -= 360.0;
}
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef(angle, 0.0, 0.0, 1.0);
glutPostRedisplay();
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(500, 500);
glutInitWindowPosition(100, 100);
glutCreateWindow("OpenGL Windmill");
glutDisplayFunc(display);
glutIdleFunc(idle);
init();
glutMainLoop();
return 0;
}
```
代码中使用了OpenGL的旋转变换函数`glRotatef()`实现风车的旋转,使用`glPushMatrix()`和`glPopMatrix()`函数保存和恢复矩阵状态。`glutIdleFunc()`函数指定了一个空闲回调函数`idle()`,在该函数中更新旋转的角度,并调用`glRotatef()`函数进行旋转。`glutPostRedisplay()`函数用于使窗口重新绘制。
阅读全文