4.2. Modelos básicos de iluminación. | Graficacion OpenGL C++

 En OpenGL, es posible aplicar modelos básicos de iluminación a objetos tridimensionales para simular la interacción de la luz con la superficie del objeto. Los modelos básicos de iluminación en OpenGL se basan en el modelo de Phong, que se compone de tres tipos de iluminación: ambiental, difusa y especular.



La iluminación ambiental es la luz que se refleja en todas las direcciones de forma uniforme y no depende de la dirección de la fuente de luz. La iluminación difusa es la luz que se refleja en una superficie en todas las direcciones igualmente, pero depende de la dirección de la fuente de luz. La iluminación especular es la luz que se refleja en una dirección específica en función de la posición del observador y de la posición de la fuente de luz.


Para aplicar iluminación en OpenGL, se debe habilitar el modelo de iluminación utilizando la función `glEnable(GL_LIGHTING)`. A continuación, se deben especificar las propiedades de la luz y del material utilizando las funciones `glLightfv()` y `glMaterialfv()`, respectivamente.



La función `glLightfv()` permite especificar las propiedades de la fuente de luz, como su posición, dirección, color y atenuación. La función `glMaterialfv()` permite especificar las propiedades del material, como su color, brillo, transparencia y reflexión.


A continuación, se muestra un ejemplo de cómo aplicar iluminación difusa y especular a un objeto tridimensional en OpenGL utilizando las funciones `glEnable()`, `glLightfv()`, `glMaterialfv()`, `glutSolidSphere()` y `glutMainLoop()`:


```c++

// Habilitar la iluminación

glEnable(GL_LIGHTING);


// Especificar la fuente de luz

GLfloat lightPosition[] = { 0.0f, 0.0f, 1.0f, 0.0f };

GLfloat lightColor[] = { 1.0f, 1.0f, 1.0f, 1.0f };

GLfloat lightAmbient[] = { 0.2f, 0.2f, 0.2f, 1.0f };

glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);

glLightfv(GL_LIGHT0, GL_DIFFUSE, lightColor);

glLightfv(GL_LIGHT0, GL_SPECULAR, lightColor);

glLightfv(GL_LIGHT0, GL_AMBIENT, lightAmbient);

glEnable(GL_LIGHT0);


// Especificar las propiedades del material

GLfloat materialColor[] = { 1.0f, 0.0f, 0.0f, 1.0f };

GLfloat materialShininess[] = { 50.0f };

glMaterialfv(GL_FRONT, GL_DIFFUSE, materialColor);

glMaterialfv(GL_FRONT, GL_SPECULAR, materialColor);

glMaterialfv(GL_FRONT, GL_SHININESS, materialShininess);


// Dibujar una esfera sólida

glutSolidSphere(1.0, 50, 50);


// Bucle principal del programa

glutMainLoop();

```


En este ejemplo, se habilita la iluminación utilizando la función `glEnable(GL_LIGHTING)`. A continuación, se especifica la fuente de luz utilizando la función `glLightfv()`, que establece la posición, color, iluminación difusa, iluminación especular y iluminación ambiental de la fuente de luz. En este caso, se utiliza la fuente de luz `GL_LIGHT0`, que se especifica utilizando el identificador `GL_LIGHT0`.


Luego, se especifican las propiedades del material utilizando la función `glMaterialfv()`. En este caso, se establece el color y la intensidad de la iluminación difusa y especular del material, así como la reflexión especular utilizando el valor de brillo.


Por último, se dibuja una esfera sólida utilizando la función `glutSolidSphere()`, que permite crear una esfera con un radio, número de segmentos y número de anillos especificados.


Es importante destacar que la aplicación de iluminación en OpenGL puede requerir una carga adicional de recursos, y puede disminuir el rendimiento del programa. Sin embargo, puede ser una técnica muy efectiva para crear objetos tridimensionales con mayor realismo visual.

Comentarios