• +34 685 967 885
  • +34 695 898 191
  • antgarprats@gmail.com
  • Antonio García Prats

un primer programa con opengl

Un primer programa con OpenGL

OpenGL (Open Graphics Library) es una API estándar y ampliamente utilizada para la creación de gráficos 2D y 3D en aplicaciones. Se desarrolló originalmente por Silicon Graphics Inc. (SGI) en 1992 y ha evolucionado para soportar renderización avanzada y aceleración de hardware. OpenGL proporciona un conjunto de funciones que permiten interactuar con las GPU (tarjetas gráficas) para dibujar gráficos con alto rendimiento. El objetivo de esta entrada de mi blog es mostraros cómo crear un primer programa con openGL.

OpenGL no incluye herramientas para la creación de interfaces gráficas ni gestión de ventanas, por lo que en combinación con OpenGL, es común usar librerías auxiliares como GLUT o GLFW para facilitar estas tareas.

¿Donde aprender más de OpenGL?

Para aprender más sobre OpenGL:

Sitio oficial de OpenGL

Tutoriales de OpenGL

GLFW (Gestión de ventanas)

Creación de un proyecto en Geany (Ubuntu)

A la hora de crear un proyecto en Ubuntu, es recomendable realizar una serie de instalaciones y/o actualizaciones. Si no tienes instalado este IDE, aquí te dejo dos comandos con lo que instalarás todo lo necesario para trabajar:

sudo apt update
sudo apt install build-essential libgl1-mesa-dev libglu1-mesa-dev freeglut3-dev

Código del proyecto

Creamos un archivo llamado main.c en Geany con el siguiente contenido:

#include <GL/glut.h> 
// Incluye OpenGL y GLUT para gráficos

// Función para configurar el entorno inicial de OpenGL
void init() {
    glClearColor(0.0, 0.0, 0.0, 1.0); // Establece el color de fondo (negro)
    glMatrixMode(GL_PROJECTION); // Configura la proyección
    glLoadIdentity(); // Reinicia la matriz
    gluOrtho2D(-10.0, 10.0, -10.0, 10.0); // Define un espacio ortogonal
}

// Función para dibujar en pantalla
void display() {
    glClear(GL_COLOR_BUFFER_BIT); // Limpia la pantalla

    // Dibuja un triángulo
    glColor3f(1.0, 0.0, 0.0); // Color rojo
    glBegin(GL_TRIANGLES); // Inicia la creación de un triángulo
        glVertex2f(0.0, 5.0); // Vértice superior
        glVertex2f(-5.0, -5.0); // Vértice inferior izquierdo
        glVertex2f(5.0, -5.0); // Vértice inferior derecho
    glEnd(); // Termina la creación del triángulo

    glFlush(); // Envía los datos a la pantalla
}

// Función principal
int main(int argc, char **argv) {
    glutInit(&argc, argv); // Inicializa GLUT
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); // Establece el modo de visualización
    glutInitWindowSize(500, 500); // Tamaño de la ventana
    glutInitWindowPosition(100, 100); // Posición de la ventana
    glutCreateWindow("Primer programa en OpenGL"); // Título de la ventana

    init(); // Llama a la función de inicialización
    glutDisplayFunc(display); // Establece la función de dibujo
    glutMainLoop(); // Inicia el bucle principal de eventos

    return 0;
}

Explicación línea a línea

1. Incluyendo las bibliotecas

#include <GL/glut.h>

La biblioteca GLUT es una capa de utilidad que simplifica la creación de ventanas y el manejo de eventos en OpenGL.

2. Inicialización de OpenGL

void init() {
    glClearColor(0.0, 0.0, 0.0, 1.0);

glClearColor: Define el color de fondo. Los parámetros son valores entre 0.0 y 1.0 que representan rojo, verde, azul y transparencia.

glMatrixMode(GL_PROJECTION);

glMatrixMode: Cambia al modo de proyección para definir cómo se muestra el espacio 3D en la pantalla.

gluOrtho2D(-10.0, 10.0, -10.0, 10.0);

gluOrtho2D: Define un espacio ortogonal (proyección 2D) con límites en los ejes x y y.

3. Función de dibujo

void display() {
    glClear(GL_COLOR_BUFFER_BIT);

glClear: Limpia el buffer de color, es decir, la pantalla.

glColor3f(1.0, 0.0, 0.0);

glColor3f: Define el color de dibujo (rojo en este caso).

    glBegin(GL_TRIANGLES);
        glVertex2f(0.0, 5.0);
        glVertex2f(-5.0, -5.0);
        glVertex2f(5.0, -5.0);
    glEnd();

glBegin y glEnd: Indican el inicio y el final de un objeto gráfico. En este caso, un triángulo.

glVertex2f: Define las coordenadas de cada vértice del triángulo.

    glFlush();

4. Función principal

int main(int argc, char **argv) {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(500, 500);
    glutInitWindowPosition(100, 100);
    glutCreateWindow("Primer programa en OpenGL");

Estas líneas inicializan GLUT, configuran la ventana y su tamaño.

    init();
    glutDisplayFunc(display);
    glutMainLoop();

glutDisplayFunc: Asocia la función de dibujo con el ciclo principal.

glutMainLoop: Inicia el bucle de eventos de OpenGL.

Compilación y ejecución

1. Compilar el código:

gcc main.c -o main -lGL -lGLU -lglut

2. Ejecutar

./main

Este proyecto sirve como introducción básica para aprender gráficos en OpenGL. Con esto conocimientos, tendrás la bases para ampliar tus conocimientos explorando modelos 3D, texturas y animaciones.

¿Tienes alguna pregunta?. No dudes en contactarme a través de mi página web o de mi página de Meta (Facebook) y estaré encantado de resolver tus dudas.

Deja una respuesta

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