Breve introducci贸n a OpenGL en Python con PyOpenGL

    Introducci贸n

    En este tutorial, aprenderemos a usar PyOpenGL biblioteca en Python. OpenGL es una biblioteca de gr谩ficos que es compatible con m煤ltiples plataformas, incluidas Windows, Linux y MacOS, y tambi茅n est谩 disponible para su uso en muchos otros idiomas; sin embargo, el alcance de esta publicaci贸n se limitar谩 a su uso en el lenguaje de programaci贸n Python.

    OpenGL, en comparaci贸n con otras bibliotecas de gr谩ficos similares, es bastante simple. Comenzaremos configur谩ndolo en nuestro sistema, seguido de escribir un ejemplo simple que demuestre el uso de la biblioteca.

    Instalaci贸n

    La forma m谩s sencilla de instalar OpenGL usando Python es a trav茅s del pepita gerente de empaquetaci贸n. Si tiene pip instalado en su sistema, ejecute el siguiente comando para descargar e instalar OpenGL:

    $ pip install PyOpenGL PyOpenGL_accelerate
    

    Recomiendo copiar el comando anterior para ayudar a evitar errores tipogr谩ficos.

    Una vez que este comando termina de ejecutarse, si la instalaci贸n es exitosa, deber铆a obtener el siguiente resultado al final:

    Successfully installed PyOpenGL-3.1.0 PyOpenGL-accelerate-3.1.0
    

    Si esto no funciona, tambi茅n puede descargarlo manualmente. Para eso, este enlace, despl谩cese hacia abajo hasta el encabezado ‘descarga e instalaci贸n’ y descargue todos los archivos all铆. Despu茅s de eso, navegue hasta la carpeta donde descarg贸 esos archivos y ejecute el siguiente comando en la terminal o s铆mbolo del sistema:

    $ python setup.py
    

    Es pertinente mencionar que necesita herramientas de compilaci贸n Visual C ++ 14.0 instaladas en su sistema para trabajar con bibliotecas OpenGL en Python.

    Ahora que hemos instalado OpenGL con 茅xito en nuestro sistema, ensuciemos nuestras manos con 茅l.

    Ejercicio de codificaci贸n

    Lo primero que debemos hacer para usar OpenGL en nuestro c贸digo es importarlo. Para hacer eso, ejecute el siguiente comando:

    import OpenGL
    

    Antes de continuar, hay algunas otras bibliotecas que debe importar siempre que desee utilizar esta biblioteca en su programa. A continuaci贸n se muestra el c贸digo para esas importaciones:

    import OpenGL.GL
    import OpenGL.GLUT
    import OpenGL.GLU
    print("Imports successful!") # If you see this printed to the console then installation was successful
    

    Ahora que hemos terminado con las importaciones necesarias, primero creemos una ventana en la que se mostrar谩n nuestros gr谩ficos. El c贸digo para eso se da a continuaci贸n, junto con su explicaci贸n en los comentarios:

    def showScreen():
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) # Remove everything from screen (i.e. displays all white)
    
    glutInit() # Initialize a glut instance which will allow us to customize our window
    glutInitDisplayMode(GLUT_RGBA) # Set the display mode to be colored
    glutInitWindowSize(500, 500)   # Set the width and height of your window
    glutInitWindowPosition(0, 0)   # Set the position at which this windows should appear
    wind = glutCreateWindow("OpenGL Coding Practice") # Give your window a title
    glutDisplayFunc(showScreen)  # Tell OpenGL to call the showScreen method continuously
    glutIdleFunc(showScreen)     # Draw any graphics or shapes in the showScreen function at all times
    glutMainLoop()  # Keeps the window created above displaying/running in a loop
    

    Copie las importaciones anteriores, as铆 como este c贸digo en un solo archivo python (.py) y ejec煤telo. Deber铆a ver aparecer una pantalla de dimensi贸n cuadrada blanca. Ahora, si deseamos dibujar alguna forma o hacer cualquier otro tipo de gr谩ficos, tenemos que hacerlo en nuestra funci贸n “showScreen”.

    Intentemos ahora hacer un cuadrado usando OpenGL, pero antes necesitamos entender el sistema de coordenadas que sigue OpenGL.

    El punto (0,0) es la parte inferior izquierda de su ventana, si sube desde all铆, se est谩 moviendo a lo largo del eje y, y si va a la derecha desde all铆, se est谩 moviendo a lo largo del eje x. Por lo tanto, el punto superior izquierdo de su ventana ser铆a (0, 500), la parte superior derecha ser铆a (500, 500), la parte inferior derecha ser铆a (500, 0).

    Nota: Estamos hablando de la ventana que creamos arriba, que ten铆a una dimensi贸n de 500 x 500 en nuestro ejemplo, y no la pantalla completa de su computadora.

    Ahora que lo hemos sacado del camino, codifiquemos un cuadrado. La explicaci贸n del c贸digo se puede encontrar en los comentarios.

    from OpenGL.GL import *
    from OpenGL.GLUT import *
    from OpenGL.GLU import *
    
    w, h = 500,500
    
    # ---Section 1---
    def square():
        # We have to declare the points in this sequence: bottom left, bottom right, top right, top left
        glBegin(GL_QUADS) # Begin the sketch
        glVertex2f(100, 100) # Coordinates for the bottom left point
        glVertex2f(200, 100) # Coordinates for the bottom right point
        glVertex2f(200, 200) # Coordinates for the top right point
        glVertex2f(100, 200) # Coordinates for the top left point
        glEnd() # Mark the end of drawing
    
    # This alone isn't enough to draw our square
    
    # ---Section 2---
    
    def showScreen():
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) # Remove everything from screen (i.e. displays all white)
        glLoadIdentity() # Reset all graphic/shape's position
        square() # Draw a square using our function
        glutSwapBuffers()
    
    #---Section 3---
    
    glutInit()
    glutInitDisplayMode(GLUT_RGBA) # Set the display mode to be colored
    glutInitWindowSize(500, 500)   # Set the w and h of your window
    glutInitWindowPosition(0, 0)   # Set the position at which this windows should appear
    wind = glutCreateWindow("OpenGL Coding Practice") # Set a window title
    glutDisplayFunc(showScreen)
    glutIdleFunc(showScreen) # Keeps the window open
    glutMainLoop()  # Keeps the above created window displaying/running in a loop
    

    Ejecutar el c贸digo anterior dibujar铆a un cuadrado, pero ese cuadrado no ser铆a visible ya que su color ser铆a el mismo que el color de nuestra ventana, por lo que necesitamos asignarle un color diferente tambi茅n, para eso haremos algunos cambios en “Secci贸n 2” del c贸digo anterior, es decir, el showScreen funci贸n. Agregue la siguiente l铆nea debajo del glLoadIdentity declaraci贸n y por encima de la square() declaraci贸n:

    glColor3f(1.0, 0.0, 3.0) # Set the color to pink
    

    Sin embargo, nuestro c贸digo a煤n no est谩 completo. Lo que hace actualmente es dibujar el cuadrado una vez y luego limpiar la pantalla nuevamente. No queremos eso. En realidad, ni siquiera seremos capaces de detectar el momento en que realmente dibuja el cuadrado porque aparecer铆a y desaparecer铆a en una fracci贸n de segundo. Escribamos otra funci贸n para evitar esto.

    # Add this function before Section 2 of the code above i.e. the showScreen function
    def iterate():
        glViewport(0, 0, 500,500)
        glMatrixMode(GL_PROJECTION)
        glLoadIdentity()
        glOrtho(0.0, 500, 0.0, 500, 0.0, 1.0)
        glMatrixMode (GL_MODELVIEW)
        glLoadIdentity()
    

    Llame a esta funci贸n iterativa en la “Secci贸n 2” del c贸digo anterior. Agr茅galo a continuaci贸n glLoadIdentity y por encima del glColor3d declaraci贸n en el showScreen funci贸n.

    Ahora compilemos todo esto en un solo archivo de c贸digo para que no haya ambig眉edades:

    from OpenGL.GL import *
    from OpenGL.GLUT import *
    from OpenGL.GLU import *
    
    w,h= 500,500
    def square():
        glBegin(GL_QUADS)
        glVertex2f(100, 100)
        glVertex2f(200, 100)
        glVertex2f(200, 200)
        glVertex2f(100, 200)
        glEnd()
    
    def iterate():
        glViewport(0, 0, 500, 500)
        glMatrixMode(GL_PROJECTION)
        glLoadIdentity()
        glOrtho(0.0, 500, 0.0, 500, 0.0, 1.0)
        glMatrixMode (GL_MODELVIEW)
        glLoadIdentity()
    
    def showScreen():
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
        glLoadIdentity()
        iterate()
        glColor3f(1.0, 0.0, 3.0)
        square()
        glutSwapBuffers()
    
    glutInit()
    glutInitDisplayMode(GLUT_RGBA)
    glutInitWindowSize(500, 500)
    glutInitWindowPosition(0, 0)
    wind = glutCreateWindow("OpenGL Coding Practice")
    glutDisplayFunc(showScreen)
    glutIdleFunc(showScreen)
    glutMainLoop()
    

    Cuando ejecute esto, deber铆a aparecer una ventana con un cuadro cuadrado de color rosa.

    Salida:

    Conclusi贸n

    En este tutorial, aprendimos sobre OpenGL, c贸mo descargarlo e instalarlo, seguido de su uso y un breve programa de ejemplo. En este ejemplo, tambi茅n practicamos la creaci贸n de una forma b谩sica usando OpenGL, lo que nos dio una idea de algunas llamadas de funciones complejas que deben realizarse cada vez que necesitamos dibujar algo usando esta biblioteca. Para concluir, OpenGL es muy ingenioso y se vuelve cada vez m谩s complejo a medida que profundizamos en 茅l.

     

    Etiquetas:

    Deja una respuesta

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