Untitled

 avatar
unknown
c_cpp
5 months ago
1.2 kB
4
Indexable
#include <GL/glut.h>

void drawCube(float x, float y, float z, float size) {
    glPushMatrix();
    glTranslatef(x, y, z);
    glutSolidCube(size);
    glPopMatrix();
}

void drawSierpinskiCube(float x, float y, float z, float size, int level) {
    if (level == 0) {
        drawCube(x, y, z, size);
    } else {
        float newSize = size / 3.0;
        for (int i = -1; i <= 1; i++) {
            for (int j = -1; j <= 1; j++) {
                for (int k = -1; k <= 1; k++) {
                    if (abs(i) + abs(j) + abs(k) > 1) {
                        drawSierpinskiCube(x + i * newSize, y + j * newSize, z + k * newSize, newSize, level - 1);
                    }
                }
            }
        }
    }
}

void display() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    drawSierpinskiCube(0, 0, 0, 1.0, 3);  // Level 3 recursion
    glFlush();
}

int main(int argc, char **argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
    glutInitWindowSize(500, 500);
    glutCreateWindow("Sierpinski Cube");
    glEnable(GL_DEPTH_TEST);
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
}
Editor is loading...
Leave a Comment