sierpinski地毯的opengl实现代码
时间: 2024-05-10 22:16:20 浏览: 87
以下是一个简单的OpenGL实现Sierpinski地毯的代码,使用C++编写:
```
#include <GL/glut.h>
void drawCarpet(int x, int y, int size) {
if (size <= 1) {
glBegin(GL_QUADS);
glVertex2i(x, y);
glVertex2i(x + size, y);
glVertex2i(x + size, y + size);
glVertex2i(x, y + size);
glEnd();
} else {
size /= 3;
drawCarpet(x, y, size);
drawCarpet(x + size, y, size);
drawCarpet(x + 2 * size, y, size);
drawCarpet(x, y + size, size);
drawCarpet(x + 2 * size, y + size, size);
drawCarpet(x, y + 2 * size, size);
drawCarpet(x + size, y + 2 * size, size);
drawCarpet(x + 2 * size, y + 2 * size, size);
}
}
void display() {
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 1.0);
drawCarpet(0, 0, 729);
glFlush();
}
void init() {
glClearColor(0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0, 729.0, 0.0, 729.0);
}
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(729, 729);
glutInitWindowPosition(100, 100);
glutCreateWindow("Sierpinski Carpet");
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
```
这个代码使用了递归来绘制Sierpinski地毯,绘制的过程是将一个正方形分成9个小正方形,中间的正方形不绘制,然后递归绘制剩下的8个小正方形,直到大小为1。在OpenGL中,我们使用`glBegin`和`glEnd`来指定一个图形的顶点,并使用`glColor`来设置颜色。在这个例子中,我们使用了`glOrtho`来设置正交投影矩阵,将图形显示在窗口中央。
阅读全文