2011-10-24 57 views
11

Tôi đang cố gắng viết một thế giới hello cho OpenGL trên Mac (Sư tử). Tôi đã tìm thấy một số related post hoặc youtube tutorial, nhưng hầu hết trong số họ yêu cầu XCode. Tôi OK với XCode, nhưng tôi nghĩ có một số cách tiếp cận đơn giản hơn để viết một thế giới hello, tương tự như viết một file .cpp trong vim dưới terminal, biên dịch và chạy. (tất nhiên là cài đặt thư viện nếu cần trước)OpenGL Hello World trên Mac mà không cần XCode

Bất kỳ ý tưởng hoặc đề xuất nào?

Trả lời

17

Nếu bạn đang sử dụng OSX, tôi khuyên bạn nên sử dụng XCode và sử dụng NSOpenGLView. This sách có rất nhiều tài liệu liên quan đến một số API bạn có thể sử dụng. GLUT chắc chắn là cách nhanh nhất để nắm bắt và thiết lập.

Nếu bạn muốn sử dụng dư thừa và biên dịch tại nhà ga bạn có thể thử này:

#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; 

} 

và sau đó biên dịch với:

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

Điều đó sẽ làm các trick. Tôi sẽ nói mặc dù không cố gắng và chống lại XCode làm việc với nó, nó sẽ giúp bạn tiết kiệm thời gian và thất vọng.

+0

Tôi đã thử phương pháp của bạn trong thiết bị đầu cuối nhưng nhận: hello.c: 47: 21: lỗi: GL/glut.h: Không có tệp hoặc thư mục nào như vậy – clwen

+0

hmmm, tôi đang chạy 10.6 (báo tuyết) và hoạt động. bạn có thể xác minh rằng bạn có GLUT trên hệ thống của mình không? bạn đã cài đặt các công cụ phát triển của XCode và Apple chưa? – whg

+0

Nó hoạt động sau khi tôi thay đổi đường dẫn bao gồm từ "GL/glut.h" thành "GLUT/glut.h". Cảm ơn rất nhiều! – clwen

0

Hãy thử sử dụng GLUT và viết một chương trình C++ nhỏ. Bạn có thể sử dụng một cái gì đó như macports để cài đặt thư viện cần thiết.

-1

Xem trực tuyến mã ví dụ/hướng dẫn của bất kỳ cuốn sách nào trên OpenGL. Tất cả đều bắt đầu với các chương trình rất đơn giản đòi hỏi tối đa GLUT (như được đề cập bởi một áp phích khác), và thường có hướng dẫn về cách xây dựng chúng. Vì vậy, chỉ cần tải về một trong những chương trình đơn giản và làm cho nó lên và chạy.

5

Đây là một chút cũ nhưng tôi sẽ trả lời bởi vì tôi vừa học được cách thực hiện. Đầu tiên có hai lỗi trong mã mẫu ở trên, chúng dễ sửa. Trên OS X 10.8, sử dụng công cụ này.

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

Mã trên phải biên dịch. Chữ ký của chức năng chính là không chính xác mặc dù.

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

Mà làm cho các glutInit sai,

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

Sản lượng sucks, nhưng nó làm cho một cửa sổ và nó cho thấy làm thế nào để sử dụng khung với kêu vang. Cảm ơn các tập tin starter.

+0

Bản sửa lỗi của Ivan có hiệu quả đối với tôi, (OSX Mavericks). https://gist.github.com/omenking/35b920a1d2cbf99fc6f2 Để chạy tệp a.out chỉ cần đặt /a.out trong dòng lệnh của bạn. –