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:
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.