3.3.2. Escalamiento. | Graficacion OpenGL C++

 El escalado es una transformación tridimensional que se utiliza para cambiar el tamaño de un objeto en una dirección específica en el espacio tridimensional. En OpenGL, se utiliza la función `glScalef()` para realizar un escalado.


El siguiente ejemplo muestra cómo realizar un escalado en OpenGL para aumentar el tamaño de un objeto en la dirección del eje Y:


```c++

// Definir la matriz de transformación

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

glScalef(1.0f, 2.0f, 1.0f);


// 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 la matriz de transformación utilizando las funciones `glMatrixMode()` y `glLoadIdentity()`. A continuación, se utiliza la función `glScalef()` para realizar un escalado de 2 unidades en la dirección del eje Y.


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 más alto en la ventana de OpenGL.


Es importante destacar que la función `glScalef()` también se acumula, lo que significa que cada vez que se llama, se aplica un nuevo escalado a la matriz de transformación actual. Para evitar que las transformaciones se acumulen, se puede guardar la matriz de transformación actual utilizando la función `glPushMatrix()` antes de llamar a `glScalef()`, y restaurarla más tarde utilizando `glPopMatrix()`.


```c++

// Definir la matriz de transformación

glMatrixMode(GL_MODELVIEW);

glLoadIdentity();

glPushMatrix();  // Guardar la matriz de transformación actual

glScalef(2.0f, 1.0f, 1.0f);


// Dibujar el primer 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();


glPopMatrix();  // Restaurar la matriz de transformación anterior

glTranslatef(0.0f, 2.0f, 0.0f);


// Dibujar el segundo objeto

glBegin(GL_QUADS);

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

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

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

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

glEnd();

```


En este ejemplo, se utiliza la función `glPushMatrix()` antes de llamar a `glScalef()`, y se utiliza la función `glPopMatrix()` para restaurar la matriz de transformación anterior antes de dibujar el segundo objeto. De esta manera, se asegura que cada objeto se dibuje en su propia posición, sin acumular las transformaciones

Comentarios