GLUT (openGL Utility Toolkit) es una librería para escribir programas con interface gráfica OpenGL de forma fácil, por lo que da la posibilidad de aprender a programar con OpenGL de una forma muy sencilla
Podremos instalar el paquete freeglut, luego para compilar utilizaremos la siguiente línea:
$ g++ -Wall -o "%e" "%f" -I/usr/include/ImageMagick/ -lglut -lGL -lGLU -lMagick++
Descomprimiremos este archivo en la carpeta del proyecto y agregaremos las siguientes librerías opengl32.lib y glut32.lib. Luego haremos un include de glut.h.
glutInit(): Inicializa GLUT para ser utilizado. Debería recibir por parámetro los parámetros que recibe la función main. glutInitDisplayMode(): Inicializa el display mode, indica cómo se mostrarán los ventanas creadas a partir de GLUT. Acepta un unsigned int como parámetro correspondiente a las distintas flags combinadas por OR (|):GLUT_RGBAGLUT_RGBGLUT_INDEXGLUT_SINGLEGLUT_DOUBLE, double buffering.GLUT_ACCUMGLUT_ALPHAGLUT_DEPTHGLUT_STENCILGLUT_MULTISAMPLEGLUT_STEREOGLUT_LUMINANCEglutInitWindowSize, recibe dos int que indican el tamaño de la ventana (ancho y alto).glutInitWindowPosition, recibe dos int que indican la posición inicial de la ventana.glutCreateWindow, crea la ventana, recibe una cadena de carácteres correspondientes al título.glutDisplayFunc, indica cual es la función encargada de dibujar. Recibe (void(*func)(void)), es decir, el nombre de la función que devuelve void y no recibe parámetros.glutPostRedisplay, ordena el redibujo.glutKeyboardFunc, indica la función que se llamará cuando se realice una pulsación de teclado. Recibe por parámetro el nombre de la función, teniendo que ser esta con el siguiente formato: (void(*func)(unsigned char key, int x, int y)).glutKeyboardUpFunc, con el mismo formato que la anterior, indica cuando se levanta una tecla.glutMainLoop función que inicia el main loop de glut, por lo tanto muestra la ventana, la mantiene abierta y se va llamando al bucle principal del programa.glutIdleFunc indica la función que se ejecutará cuando se haga una iteración del main loop.glutTimerFunc indica cada cuanto se ejecutará la función del main loop.#include "glut.h" void renderScene(void) { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLES); glVertex3f(-0.5,-0.5,0.0); glVertex3f(0.5,0.0,0.0); glVertex3f(0.0,0.5,0.0); glEnd(); glFlush(); } void main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); glutInitWindowPosition(100,100); glutInitWindowSize(320,320); glutCreateWindow("3D Tech- GLUT Tutorial"); glutDisplayFunc(renderScene); glutMainLoop(); }
Antes de empezar a desarrollar para Linux en OpenGL es necesario saber si nuestro sistema puede renderizar código OpenGL, para ello utilizaremos el comando glxinfo de la siguiente forma:
glxinfo | grep "rendering"
Este comando puede servirnos también para saber qué versión tenemos y la marca de los drivers:
glxinfo | grep "version" glxinfo | grep "vendor"
Para comprobar el funcionamiento de OpenGL en Linux ejecutaremos el comando glxgears.
En caso de no funcionar deberíamos instalar Mesa 3d.
Al desarrollar en X11 será necesario hacer dos cosas:
X11 al preprocesador compilando con: -lX11#include <X11/Xlib.h> Una vez realizados los pasos anteriores podremos usar las funciones para el servidor X. Las que nos importan ahora son:
Display sobre el que se creará la ventana, para ello le preguntamos al sistema utilizando la función getenv.Display.Display *dpy = XOpenDisplay(getenv("DISPLAY")); XCloseDisplay(dpy);
GLX es la librería que proporciona un enlace entre las X y OpenGL activando la posibilidad de dibujo 3d sobre las ventanas. Para desarrollar con esta debemos añadir la librería GL (compilando con -lGL).
La versión actual de GLX es la 1.3 que corresponde a la OpenGL 1.2.