3.3.4. Sesgado | Graficacion OpenGL C++ Ejemplos

El sesgado es una transformación tridimensional que se utiliza para deformar un objeto en una dirección específica en el espacio tridimensional. En OpenGL, se utiliza la función `glMultMatrixf()` para realizar un sesgado.


El siguiente ejemplo muestra cómo realizar un sesgado en OpenGL para estirar un objeto en la dirección del eje X:


```c++

// Definir la matriz de transformación

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();


GLfloat matrix[16] = { 1.0f, 0.0f, 0.0f, 0.0f,

                       1.0f, 1.0f, 0.0f, 0.0f,

                       0.0f, 0.0f, 1.0f, 0.0f,

                       0.0f, 0.0f, 0.0f, 1.0f };

glMultMatrixf(matrix);


// Dibujar el objeto

glBegin(GL_TRIANGLES);

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, primero se define una matriz de transformación utilizando un arreglo de 16 valores. Esta matriz realiza un sesgado en la dirección del eje X, estirando el objeto en esa dirección.


A continuación, se utiliza la función `glMultMatrixf()` para multiplicar la matriz de transformación actual por la matriz de sesgado. Finalmente, se dibuja un objeto en la ventana de OpenGL utilizando la función `glBegin()` y `glEnd()`, que dibuja un triángulo en la posición transformada.


El resultado de este código sería un triángulo estirado en la dirección del eje X en la ventana de OpenGL.


Es importante destacar que la función `glMultMatrixf()` no acumula las transformaciones, sino que reemplaza la matriz de transformación actual por la matriz de transformación especificada. Por lo tanto, es importante tener en cuenta el orden de las transformaciones si se van a aplicar múltiples transformaciones en una sola llamada a `glMultMatrixf()`.


```c++

// Definir la matriz de transformación

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();


GLfloat matrix1[16] = { 1.0f, 0.0f, 0.0f, 0.0f,

                        1.0f, 1.0f, 0.0f, 0.0f,

                        0.0f, 0.0f, 1.0f, 0.0f,

                        0.0f, 0.0f, 0.0f, 1.0f };

glMultMatrixf(matrix1);


GLfloat matrix2[16] = { 1.0f, 0.0f, 0.0f, 0.0f,

                        0.0f, 1.0f, 0.0f, 0.0f,

                        0.5f, 0.0f, 1.0f, 0.0f,

                        0.0f, 0.0f, 0.0f, 1.0f };

glMultMatrixf(matrix2);


// Dibujar el objeto

glBegin(GL_TRIANGLES);

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 realizan dos transformaciones: un sesgado en la dirección del eje X, seguido de un sesgado en la dirección del eje Z. Las dos transformaciones se aplican en una sola llamada a `glMultMatrixf()`.


Es importante tener en cuenta que la función `glMultMatrixf()` utiliza una matriz de 16 valores en orden de columna mayor, es decir, que los valores de la primera columna se almacenan consecutivamente en los primeros cuatro elementos del arreglo, los valores de la segunda columna se almacenan consecutivamente en los siguientes cuatro elementos del arreglo, y así sucesivamente.


En resumen, el sesgado es una transformación tridimensional que se utiliza para deformar un objeto en una dirección específica en el espacio tridimensional. En OpenGL, se utiliza la función `glMultMatrixf()` para realizar un sesgado, y se deben especificar los valores de la matriz de transformación en un arreglo de 16 valores en orden de columna mayor.

Comentarios