2011-10-24 21 views
11

Estoy tratando de escribir un mundo de hola para OpenGL en Mac (Lion). He encontrado algunos related post o youtube tutorial, pero la mayoría de ellos requieren XCode. Estoy de acuerdo con XCode, pero pensé que debería haber algunos enfoques más sencillos para escribir solo un mundo de saludo, similar a escribir un archivo .cpp en vim bajo terminal, compilar y ejecutar. (por supuesto, instale bibliotecas si es necesario de antemano)OpenGL Hello World en Mac sin XCode

¿Alguna idea o sugerencia?

Respuesta

17

Si está utilizando OSX, le recomiendo usar XCode y usar NSOpenGLView. This libro tiene un montón de material con respecto a las diversas API que puede utilizar. GLUT es definitivamente el más rápido de manejar y configurar.

Si desea utilizar GLUT y compilar en el terminal podría intentar esto:

#include <GLUT/glut.h> 

void display(void) { 

    //clear white, draw with black 
    glClearColor(255, 255, 255, 0); 
    glColor3d(0, 0, 0); 

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

    //this draws a square using vertices 
    glBegin(GL_QUADS); 
    glVertex2i(0, 0); 
    glVertex2i(0, 128); 
    glVertex2i(128, 128); 
    glVertex2i(128, 0); 
    glEnd(); 

    //a more useful helper 
    glRecti(200, 200, 250, 250); 

    glutSwapBuffers(); 

} 

void reshape(int width, int height) { 

    glViewport(0, 0, width, height); 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 

    //set the coordinate system, with the origin in the top left 
    gluOrtho2D(0, width, height, 0); 
    glMatrixMode(GL_MODELVIEW); 

} 

void idle(void) { 

    glutPostRedisplay(); 
} 

int main(int argc, char *argv) { 

    //a basic set up... 
    glutInit(&argc, &argv); 
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH); 
    glutInitWindowSize(640, 480); 

    //create the window, the argument is the title 
    glutCreateWindow("GLUT program"); 

    //pass the callbacks 
    glutDisplayFunc(display); 
    glutReshapeFunc(reshape); 
    glutIdleFunc(idle); 

    glutMainLoop(); 

    //we never get here because glutMainLoop() is an infinite loop 
    return 0; 

} 

y luego compilar con:

gcc /System/Library/Frameworks/GLUT.framework/GLUT /System/Library/Frameworks/OpenGL.framework/OpenGL main.c -o myGlutApp 

Que debe hacer el truco. Yo diría que aunque no intentes luchar contra el trabajo de XCode con él, te ahorrará tiempo y frustración.

+0

Probé tu método en la terminal pero obtengo: hello.c: 47: 21: error: GL/glut.h: No existe tal archivo o directorio – clwen

+0

hmmm, estoy ejecutando 10.6 (leopardo de las nieves) y funciona. ¿Puedes verificar que tienes GLUT en tu sistema? ¿Has instalado XCode y las herramientas de desarrollador de Apple? – whg

+0

Funciona después de cambiar la ruta de inclusión de "GL/glut.h" a "GLUT/glut.h". ¡Muchas gracias! – clwen

0

Pruebe usar GLUT y escriba un pequeño programa en C++. Puede usar algo como macports para instalar las bibliotecas necesarias.

-1

Busque en línea el código de ejemplo/tutorial de cualquier libro sobre OpenGL. Todos comienzan con programas muy simples que requieren como máximo GLUT (como se menciona en otro póster), y generalmente tienen instrucciones sobre cómo construirlos. Así que solo descarga uno de estos simples programas y comienza a funcionar.

5

Esto es un poco viejo, pero lo responderé porque acabo de aprender a hacerlo. Primero hay dos errores en el código de ejemplo anterior, son fáciles de corregir. En OS X 10.8 usando clang esto funciona.

clang++ -framework glut -framework opengl hello.cpp 

El código anterior debe compilarse. La firma de la función principal es incorrecta.

<int main(int argc, char *argv) 
>int main(int argc, char **argv) 

que hace que el glutInit mal,

<glutInit(&argc, &argv); 
>glutInit(&argc, argv); 

La salida chupa, pero hace una ventana y se muestra cómo utilizar los marcos con sonido metálico. Gracias por el archivo de inicio.

+0

La solución de Ivan funcionó para mí, (OSX Mavericks). https://gist.github.com/omenking/35b920a1d2cbf99fc6f2 Para ejecutar el archivo a.out, simplemente ponga /a.out en su línea de comandos. –