opengl绘制风车,每个叶片颜色不一,且有风车杆
时间: 2023-06-26 21:10:32 浏览: 464
以下是使用 OpenGL 绘制风车和风车杆的示例代码,其中每个叶片颜色都不同:
```c++
#include <GL/glut.h>
void drawBlade() {
glBegin(GL_POLYGON);
glColor3f(1.0, 0.0, 0.0); // 红色
glVertex2f(0.0, 0.0);
glVertex2f(0.2, 1.0);
glVertex2f(0.4, 1.0);
glVertex2f(0.6, 0.0);
glEnd();
}
void drawWindmill() {
glPushMatrix();
glTranslatef(-0.3, 0.2, 0.0);
glRotatef(45.0, 0.0, 0.0, 1.0);
// 绘制风车杆
glLineWidth(3.0);
glBegin(GL_LINES);
glColor3f(0.0, 0.0, 0.0); // 黑色
glVertex2f(0.0, 0.0);
glVertex2f(0.0, -0.5);
glEnd();
// 绘制风车叶片
glPushMatrix();
glTranslatef(0.0, -0.5, 0.0);
drawBlade();
glRotatef(120.0, 0.0, 0.0, 1.0);
drawBlade();
glRotatef(120.0, 0.0, 0.0, 1.0);
drawBlade();
glPopMatrix();
glPopMatrix();
}
void display() {
glClear(GL_COLOR_BUFFER_BIT);
drawWindmill();
glFlush();
}
void init() {
glClearColor(1.0, 1.0, 1.0, 1.0); // 白色
glMatrixMode(GL_PROJECTION);
gluOrtho2D(-1.0, 1.0, -1.0, 1.0);
}
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(500, 500);
glutCreateWindow("OpenGL Windmill");
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
```
在此示例中,我们定义了两个函数 `drawBlade()` 和 `drawWindmill()`,分别用于绘制风车叶片和风车杆。在 `drawBlade()` 函数中,我们使用 `glColor3f()` 函数设置了红色。你可以为每个叶片设置不同的颜色,只需要在绘制时更改 `glColor3f()` 函数的参数即可。
在 `drawWindmill()` 函数中,我们使用 `glPushMatrix()` 函数将当前矩阵压入堆栈,以便稍后将其还原。然后我们使用 `glTranslatef()` 函数将原点移动到风车杆的底部,使用 `glRotatef()` 函数旋转坐标系,并绘制风车杆和三个叶片。
在 `display()` 函数中,我们使用 `glClear()` 函数清除颜色缓冲区,并使用 `drawWindmill()` 函数绘制风车。
在 `init()` 函数中,我们设置了背景颜色为白色,并使用 `gluOrtho2D()` 函数设置了正交投影矩阵。
最后,在 `main()` 函数中,我们初始化 GLUT 并设置显示模式、窗口大小和标题。我们还注册了 `display()` 函数,以便在窗口需要重绘时调用它。最后,我们进入了主循环,等待事件的发生并响应它们。
希望这个示例能够帮助你了解如何使用 OpenGL 绘制风车和风车杆,并设置不同颜色的叶片。
阅读全文