Saltar al contenido

En OpenGL, ¿cómo puedo ajustar el tamaño de la ventana?

Este team especializado pasados muchos días de trabajo y recopilación de de información, hallamos la solución, queremos que todo este artículo sea de utilidad en tu proyecto.

Solución:

Definitivamente no desea que el tamaño de sus objetos dependa explícitamente del tamaño de la ventana.

Como ya sugirió genpfault, ajuste su matriz de proyección cada vez que cambie el tamaño de la ventana.

Cosas que hacer en el cambio de tamaño de la ventana:

  1. Ajustar ventana gráfica

    glViewport(0, 0, width, height)
    
  2. Ajustar rectángulo de tijera (solo si tienes GL_SCISSOR_TEST activado)

    glScissor(0, 0, width, height)
    
  3. Ajustar matriz de proyección

    En el caso de OpenGL heredado (canalización de función fija), puede hacerlo de las siguientes maneras:

    glFrustum(left * ratio, right * ratio, bottom, top, nearClip,farClip)
    

    o

    glOrtho(left * ratio, right * ratio, bottom, top, nearClip,farClip)
    

    o

    gluOrtho2D(left * ratio, right * ratio, bottom, top)
    

    (asumiendo que left, right, bottom y top todos son iguales y ratio=width/height)

Si está usando algo como gluPerspective() simplemente use la relación ancho/alto de la ventana:

gluPerspective(60, (double)width/(double)height, 1, 256);

Debe configurar algún tipo de función de controlador de ventana que se llame cada vez que se cambie el tamaño de su ventana OpenGL. Debe ocuparse del caso cuando aspectRatio > 1 y cuando aspectRatio <= 1 por separado. Si no lo hace, es posible que la geometría quede fuera de la pantalla después de cambiar el tamaño de la pantalla.

void windowResizeHandler(int windowWidth, int windowHeight)
    const float aspectRatio = ((float)windowWidth) / windowHeight;
    float xSpan = 1; // Feel free to change this to any xSpan you need.
    float ySpan = 1; // Feel free to change this to any ySpan you need.

    if (aspectRatio > 1)
        // Width > Height, so scale xSpan accordinly.
        xSpan *= aspectRatio;
    
    else
        // Height >= Width, so scale ySpan accordingly.
        ySpan = xSpan / aspectRatio;
    

    glOrhto2D(-1*xSpan, xSpan, -1*ySpan, ySpan, -1, 1);

    // Use the entire window for rendering.
    glViewport(0, 0, windowWidth, windowHeight);

Comentarios y calificaciones del artículo

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *