29JulOpenGL y GLUT en Xcode
En primer lugar, quiero decir que este post es bastante específico y, posiblemente, sólo será útil para aquellos programadores que deseen realizar alguna aplicación con la librería gráfica OpenGL desde el IDE Xcode de MacOS. En este breve tutorial pretendo indicaros los pasos necesarios para crear un proyecto en C++ haciendo uso de las librerías de OpenGL y GLUT que incorpora el sistema operativo de Apple.
En primer lugar debemos arrancar el entorno de desarrollo Xcode, por ejemplo desde la carpeta de Aplicaciones, y nos disponemos a crear un nuevo proyecto vacío haciendo clic en File/New Project y posteriormente, en la ventana emergente, Empty Project.
Luego debemos indicar un nombre para el proyecto. Para el ejemplo utilizaremos el nombre de “SegmentationFault”.
Y ya tenemos el proyecto vacío creado. Ahora debemos empezar a configurarlo para que funcione con OpenGL y GLUT. Primero crearemos un nuevo Target, mediante Project/New Target o con el botón derecho encima de Targets y Add/New Target.
Seleccionamos el tipo del Target como Cocoa Application y especificamos un nombre, por ejemplo, GLUT.
A continuación se nos muestran las configuraciones por defecto del Target, de las cuales sólo deberemos modificar la entrada de GCC_PREFIX_HEADER para poner el campo en blanco. Recomiendo que utilicéis el buscador para encontrar la opción entre todas las existentes.
Ahora debemos añadir a nuestro Target, los Frameworks de OpenGL y GLUT incluidos en la libraría del Sistema Operativo. Para ello clic derecho sobre el Target creado y seleccionamos Add/Existing Frameworks…
Nos aparecerá una ventana en la que deberemos seleccionar los Frameworks GLUT.framework y OpenGL.framework alojados en la carpeta /Sistema/Librería/Frameworks de nuestro disco duro. Podemos seleccionar ambos manteniendo pulsada la tecla cmd mientras clicamos.
En la ventana emergente que aparece después de seleccionarlos no modificamos nada y simplemente clicamos sobre Add.
Ahora ya tenemos configurado nuestro proyecto para que trabaje con las librerías OpenGL y GLUT. A continuación creamos un nuevo fichero de código fuente al proyecto para comprovar que todo funciona correctamente.
Seleccionamos nuevo fichero vacío en el proyecto y especificamos un nombre, por ejemplo, main.cpp.
En el nuevo fichero podemos poner el código que os muestro a continuación que, si todo el proceso ha ido correctamente, debe renderizar un triángulo en pantalla.
//include GLUT
#include <GLUT/glut.h>;
//set the macros for the window size
#define SIZEX 500
#define SIZEY 500
//initializing stuff
void init(void)
{
glDisable( GL_DEPTH_TEST ); //triangles have two sides
glDisable( GL_CULL_FACE ); //triangles have two sides
}
//Render one frame
void render(void)
{
//Clear the window and the depth buffer
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//Render the triangle
glBegin(GL_TRIANGLES);
glColor3f(1.0f, 0.0f, 0.0f ); //change vertex color
glVertex2d( -0.5f, -0.5f );
glColor3f(0.0f, 1.0f, 0.0f ); //change vertex color
glVertex2d( 0.5f, -0.5f );
glColor3f(0.0f, 0.0f, 1.0f ); //change vertex color
glVertex2d( 0.0f, 0.5f );
glEnd();
//Swap front and back buffer
glutSwapBuffers();
}
int main(int argc, char **argv)
{
//init all OpenGL stuff
glutInit(&argc, argv); //init GLUT
glutInitDisplayMode( GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE ); //init framebuffer properties
glutInitWindowSize(SIZEX, SIZEY); //init window dimensions
glutCreateWindow("Segmentation Fault"); //create window
//now that we have the window we can set the opengl state
init();
//set the callbacks
glutDisplayFunc(render); //render a frame
glutIdleFunc(render); //what to do when nothing happens
//start the GLUT mainloop (this function will be executed in a loop)
glutMainLoop();
return 0;
}
Y el resultado debe ser este:
Como siempre os digo, ante cualquier duda sabed que no cobramos por comentar. Salu2!
Fuentes
OneSadCookie – http://blog.onesadcookie.com/2007/12/xcodeglut-tutorial.html
Javi Agenjo – http://www.tecn.upf.edu/~jagenjo/
















11 Responses and Counting...
Bitacoras.com
July 29th 2009Información Bitacoras.com…
Valora en Bitacoras.com: No hay resumen disponible para esta anotación…
Bracelets
Thank you very much for that glorious article
Floost
I really like your blog and i respect your work. I’ll be a frequent visitor.
babafisa
Great article . Will definitely copy it to my website.
hotspotshield
It was a very interesting post thanks for writing it!
John
Are you a professional journalist? You write very well.
Kouba
Valuable thoughts and advices. I read your topic with great interest.
Kouba
I read a few topics. I respect your work and added blog to favorites.
Kouba
In truth, immediately i didn’t understand the essence. But after re-reading all at once became clear.
zambombas
Hola!! perdona queria comentarte que me da un pequeño error aqui en
glutInit(&,argc,argv);
diciendome que la variable no esta creada ( que es verdad ) , pero en tu codigo no la veo por ningun lado
Gabi García
Hola zambombas!
Pues el error está en mi código. Más que un error, es una pequeña errata generada por el editor de WordPress que ha transformado el caracter & en su correspondiente valor en entity HTML. Sólo debes modificar la línea que te da error:
glutInit(&,argc,argv);
Por su versión correcta:
glutInit(&argc,argv);
En esta línea llamas a la función glutInit() pasándole por parámetros los argumentos de la función main por referencia.
Gracias por tu aportación y espero que se solucione el problema.
Salu2!