#include <GL/glut.h>
#include <cmath>
#include <iostream>

float reductionFactor = 0.7f;  // Factor de reducción de las imágenes
int repetitions = 5;  // Número de repeticiones

// Función para dibujar una imagen (en este caso, un cuadrado simple)
void drawImage(float size) {
    glBegin(GL_QUADS);
    glVertex2f(-size / 2, -size / 2);
    glVertex2f(size / 2, -size / 2);
    glVertex2f(size / 2, size / 2);
    glVertex2f(-size / 2, size / 2);
    glEnd();
}

// Función para dibujar las imágenes repetidas en los vértices de un triángulo rectángulo
void drawImages() {
    float initialSize = 0.2f;  // Tamaño inicial de la imagen
    float currentSize = initialSize;

    // Los vértices de un triángulo rectángulo en coordenadas 2D
    float vertices[3][2] = {
        {0.0f, 0.5f},  // vértice superior (0, 0.5)
        {-0.5f, -0.5f}, // vértice inferior izquierdo (-0.5, -0.5)
        {0.5f, -0.5f}   // vértice inferior derecho (0.5, -0.5)
    };

    // Repetir el proceso cinco veces
    for (int i = 0; i < repetitions; ++i) {
        // Dibujar las imágenes en los tres vértices del triángulo rectángulo
        for (int j = 0; j < 3; ++j) {
            glPushMatrix();
            glTranslatef(vertices[j][0], vertices[j][1], 0.0f); // Mover al vértice
            drawImage(currentSize);  // Dibujar la imagen
            glPopMatrix();
        }

        // Reducir el tamaño para la siguiente repetición
        currentSize *= reductionFactor;
    }
}

// Función de renderizado principal
void display() {
    glClear(GL_COLOR_BUFFER_BIT);

    // Dibujar las imágenes
    drawImages();

    glutSwapBuffers();
}

// Función para configurar la ventana y el contexto de OpenGL
void init() {
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);  // Fondo negro
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(-1.0, 1.0, -1.0, 1.0);  // Configurar el sistema de coordenadas ortográficas
    glMatrixMode(GL_MODELVIEW);
}

// Función principal
int main(int argc, char** argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
    glutInitWindowSize(500, 500);
    glutCreateWindow("Imagen repetida en Triángulo Rectángulo");

    init();
    glutDisplayFunc(display);

    glutMainLoop();

    return 0;
}

