4.1. Relleno de polígonos. | Graficacion OpenGL C++ Ejemplos

 El relleno de polígonos es una técnica utilizada en gráficos 3D para colorear completamente la superficie de un objeto tridimensional con un color sólido o un patrón. En OpenGL, existen varias formas de rellenar polígonos, como el relleno plano, el relleno degradado y el relleno de textura.


A continuación, se presenta un ejemplo de cómo realizar el relleno plano de un polígono en OpenGL utilizando la función `glColor3f()` y las funciones `glBegin()` y `glEnd()`:


```c++

// Dibujar un triángulo con relleno plano

glBegin(GL_TRIANGLES);

glColor3f(1.0f, 0.0f, 0.0f); // Color rojo

glVertex3f(-1.0f, -1.0f, 0.0f);

glVertex3f(1.0f, -1.0f, 0.0f);

glVertex3f(0.0f, 1.0f, 0.0f);

glEnd();

```


En este ejemplo, se utiliza la función `glBegin()` para comenzar a dibujar un polígono, en este caso, un triángulo. A continuación, se especifica el color de relleno utilizando la función `glColor3f()`, que recibe tres valores de punto flotante que representan los componentes rojo, verde y azul del color (en este caso, rojo puro). Finalmente, se especifican las coordenadas de los vértices del triángulo utilizando la función `glVertex3f()` y se utiliza la función `glEnd()` para finalizar el dibujo del polígono.


Otra técnica de relleno común es el relleno degradado, que permite crear una transición suave entre dos o más colores en la superficie del objeto. A continuación, se muestra un ejemplo de cómo realizar el relleno degradado de un polígono en OpenGL utilizando la función `glBegin()` y `glEnd()` y la función `glShadeModel()`:


```c++

// Dibujar un cuadrado con relleno degradado

glBegin(GL_QUADS);

glShadeModel(GL_SMOOTH); // Establecer el modelo de sombreado suave

glColor3f(1.0f, 0.0f, 0.0f); // Color rojo en la esquina superior izquierda

glVertex3f(-1.0f, 1.0f, 0.0f);

glColor3f(0.0f, 1.0f, 0.0f); // Color verde en la esquina superior derecha

glVertex3f(1.0f, 1.0f, 0.0f);

glColor3f(0.0f, 0.0f, 1.0f); // Color azul en la esquina inferior derecha

glVertex3f(1.0f, -1.0f, 0.0f);

glColor3f(1.0f, 1.0f, 1.0f); // Color blanco en la esquina inferior izquierda

glVertex3f(-1.0f, -1.0f, 0.0f);

glEnd();

```


En este ejemplo, se utiliza la función `glShadeModel()` para establecer el modelo de sombreado suave, que permite realizar el relleno degradado del polígono. A continuación, se utiliza la función `glColor3f()` para especificar el color en cada vértice del cuadrado. La combinación de colores crea una transición suave entre los diferentes vértices, lo que da como resultado un relleno degradado.


Por último, otra técnica común de relleno en OpenGL es el relleno de textura, que permite mapear una textura sobre la superficie del objeto. A continuación, se muestra un ejemplo de cómo realizar el relleno de textura de un polígono en OpenGL utilizando la función `glBindTexture()` y las funciones `glBegin()` y `glEnd()`:


```c++

// Cargar la textura desde un archivo de imagen

GLuint texture;

glGenTextures(1, &texture);

glBindTexture(GL_TEXTURE_2D, texture);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

int width, height;

unsigned char* image = SOIL_load_image("textura.png", &width, &height, 0, SOIL_LOAD_RGB);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, image);

SOIL_free_image_data(image);

glBindTexture(GL_TEXTURE_2D, 0);


// Dibujar un cuadrado con relleno de textura

glEnable(GL_TEXTURE_2D);

glBindTexture(GL_TEXTURE_2D, texture);

glBegin(GL_QUADS);

glTexCoord2f(0.0f, 0.0f); // Coordenadas de textura de la esquina superior izquierda

glVertex3f(-1.0f, 1.0f, 0.0f);

glTexCoord2f(1.0f, 0.0f); // Coordenadas de textura de la esquina superior derecha

glVertex3f(1.0f, 1.0f, 0.0f);

glTexCoord2f(1.0f, 1.0f); // Coordenadas de textura de la esquina inferior derecha

glVertex3f(1.0f, -1.0f, 0.0f);

glTexCoord2f(0.0f, 1.0f); // Coordenadas de textura de la esquina inferior izquierda

glVertex3f(-1.0f, -1.0f, 0.0f);

glEnd();

glBindTexture(GL_TEXTURE_2D, 0);

glDisable(GL_TEXTURE_2D);

```


En este ejemplo, primero se carga una textura desde un archivo de imagen utilizando la biblioteca SOIL, que permite leer archivos de imagen en formatos comunes como JPG y PNG. A continuación, se especifican los parámetros de la textura utilizando las funciones `glTexParameteri()` y `glTexImage2D()`. Finalmente, se utiliza la función `glBindTexture()` para enlazar la textura antes de dibujar el polígono.


En el dibujo del polígono, se utiliza la función `glEnable()` para activar el mapeo de textura, y la función `glBindTexture()` para enlazar la textura previamente cargada. A continuación, se utilizan las funciones `glTexCoord2f()` para especificar las coordenadas de textura en cada vértice del cuadrado. La combinación de las coordenadas de textura y los vértices del polígono permiten mapear la textura en la superficie del objeto, lo que da como resultado un relleno de textura.


En resumen, el relleno de polígonos es una técnica esencial en la representación de objetos tridimensionales en OpenGL. A través de la utilización de funciones como `glColor3f()`, `glShadeModel()`, `glBindTexture()` y `glTexCoord2f()`, se pueden crear diferentes efectos de relleno, desde el relleno plano hasta el relleno degradado y el relleno de textura.

Comentarios