post

Bibliotecas gráficas

bibliotecas gráficas model with angel wings
Photo by Nataliia Holovchuk on Pexels.com

Las bibliotecas gráficas, como DirectX y OpenGL, desempeñan un papel fundamental en el mundo de la programación y el desarrollo de aplicaciones interactivas, especialmente en el ámbito de los videojuegos y la simulación gráfica. Estas proporcionan a los desarrolladores las herramientas necesarias para aprovechar al máximo el potencial de los componentes gráficos de una computadora y crear experiencias visuales envolventes.

DirectX, desarrollado por Microsoft, es una suite de tecnologías diseñada principalmente para plataformas Windows, mientras que OpenGL, una especificación de gráficos multiplataforma, ofrece un enfoque más abierto y compatible con diversas plataformas, incluyendo Windows, macOS y Linux.

Ambas bibliotecas permiten controlar gráficos en 2D y 3D, interactuar con dispositivos de entrada y crear entornos visuales impactantes en una variedad de aplicaciones. Ya sea que estés interesado en juegos, visualización científica o aplicaciones de diseño, comprender estas bibliotecas gráficas es esencial para desarrollar software atractivo y de alto rendimiento.

Directx

Para hacer un pequeño test de la biblioteca gráfica Directx sigue los siguientes pasos:

  1. Presiona la tecla “Windows” + “R” para abrir la ventana Ejecutar.
  2. Escribe “dxdiag” y presiona Enter.
  3. Se abrirá la utilidad “DirectX Diagnostic Tool”. Aquí podrás ver información detallada sobre tu versión de DirectX en la pestaña “System”.

OpenGL

OpenGL es una tecnología gráfica de código abierto y se utiliza ampliamente en sistemas Windows, Mac y Linux. Para probar OpenGL, puedes utilizar programas de prueba de rendimiento gráfico como “OpenGL Extensions Viewer” o “GL-Z.” o usar el siguiente código escrito en python

Para que este código funcione hay que instalar las siguientes librerías: PyGame, PyOpenGL y PyOpenGL_accelerate. Para instalarlas hay que hacer uso del comando pip de la siguiente forma:

pip install PyGame PyOpenGL PyOpenGL_accelerate

Una vez que se tenga instalado las librerías copia el siguiente código en un fichero con nombre test_opengl.py

from OpenGL.GL import *
import sys
import pygame
from pygame.locals import *
from OpenGL.GLU import *


vertices = [(0.5, -0.5, 0.5), (-0.5, -0.5, 0.5), (0.5, 0.5, 0.5), (-0.5, 0.5, 0.5), (0.5, 0.5, -0.5), (-0.5, 0.5, -0.5), (0.5, -0.5, -0.5), (-0.5, -0.5, -0.5), (0.5, 0.5, 0.5), (-0.5, 0.5, 0.5), (0.5, 0.5, -0.5), (-0.5, 0.5, -0.5),
            (0.5, -0.5, -0.5), (0.5, -0.5, 0.5), (-0.5, -0.5, 0.5), (-0.5, -0.5, -0.5), (-0.5, -0.5, 0.5), (-0.5, 0.5, 0.5), (-0.5, 0.5, -0.5), (-0.5, -0.5, -0.5), (0.5, -0.5, -0.5), (0.5, 0.5, -0.5), (0.5, 0.5, 0.5), (0.5, -0.5, 0.5)]
triangles = [0, 2, 3, 0, 3, 1, 8, 4, 5, 8, 5, 9, 10, 6, 7, 10, 7, 11, 12,
             13, 14, 12, 14, 15, 16, 17, 18, 16, 18, 19, 20, 21, 22, 20, 22, 23]


def wireCube():
    for t in range(len(triangles) - 3):
        glBegin(GL_LINES)
        glVertex3fv(vertices[triangles[t]])
        glVertex3fv(vertices[triangles[t + 1]])
        glVertex3fv(vertices[triangles[t + 2]])
        glEnd()
        t += 3

pygame.init()

# Project settings
screen_width = 900
screen_height = 600
background_color = (0, 0, 0, 1)
drawing_color = (0, 1, 0, 1)

screen = pygame.display.set_mode(
    (screen_width, screen_height), DOUBLEBUF | OPENGL)

clock = pygame.time.Clock()


def initialise():
    glClearColor(background_color[0], background_color[1],
                 background_color[2], background_color[3])
    glColor(drawing_color)

    # Projection
    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    gluPerspective(60, (screen_width / screen_height), 0.1, 100.0)

    # Model View
    glMatrixMode(GL_MODELVIEW)
    glTranslate(0, 0, -5)
    glLoadIdentity()
    glViewport(0, 0, screen.get_width(), screen.get_height())
    glEnable(GL_DEPTH_TEST)
    glTranslate(0, 0, -2)


def display():
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
    glRotatef(1, 10, 0, 1)
    glPushMatrix()
    wireCube()
    glPopMatrix()


done = False
initialise()
while not done:
    clock.tick(60) / 1000
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            done = True
    display()
    pygame.display.flip()
    pygame.display.set_caption(f"{clock.get_fps():.0f} Frame por segundo")
pygame.quit()        

Una vez que se haya guardado el fichero, abre la terminal y ejecutalo. Se suele hacer con el siguiente comando:

python test_opengl.py

Pulsas enter y debe de abrirse una ventana con un cubo, sus aristas girando.

Leave a Reply

Your email address will not be published. Required fields are marked *