OpenGL

Dieses Thema im Forum "Mac OS X Entwickler, Programmierer" wurde erstellt von Peter Stoffer, 17.03.2004.

  1. Peter Stoffer

    Peter Stoffer Thread Starter MacUser Mitglied

    Beiträge:
    15
    Zustimmungen:
    0
    MacUser seit:
    18.02.2004
    Hallo zusammen

    ich möchte beginnen, mit OpenGL zu programmieren. Ich habe ein C++-Tool erstellt, das GLUT-Framework importiert und wenig Code aus einem Beispiel abgeschrieben.
    Beim Kompilieren erhalte ich jedoch diese Fehlermeldung:

    ld: /Users/pstoffe/MyGlut/build/MyGlut.build/MyGlut.build/Objects-normal/ppc/main.o illegal reference to symbol: _glBegin defined in indirectly referenced dynamic library /System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib

    Was mache ich falsch?

    Vielen Dank für eure Hilfe
     
  2. -Nuke-

    -Nuke- MacUser Mitglied

    Beiträge:
    2.135
    Zustimmungen:
    15
    MacUser seit:
    13.09.2003
    Wie sieht denn der Code aus?
     
  3. Peter Stoffer

    Peter Stoffer Thread Starter MacUser Mitglied

    Beiträge:
    15
    Zustimmungen:
    0
    MacUser seit:
    18.02.2004
    Das Programm soll ein weisses Viereck auf schwarzem Hintergrund anzeigen:

    main.cpp:

    #include <OpenGL/gl.h>
    #include <GLUT/glut.h>

    void display(void)
    {
    glClear (GL_COLOR_BUFFER_BIT);
    glColor3f (1.0, 1.0, 1.0);
    glBegin(GL_POLYGON);
    glVertex3f (0.25, 0.25, 0.0);
    glVertex3f (0.75, 0.25, 0.0);
    glVertex3f (0.75, 0.75, 0.0);
    glVertex3f (0.25, 0.75, 0.0);
    glEnd();
    glFlush ();
    }

    void init (void)
    {
    glClearColor (0.0, 0.0, 0.0, 0.0);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
    }

    int main(int argc, char** argv)
    {
    glutInit(&argc, argv);
    glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize (250, 250);
    glutInitWindowPosition (100, 100);
    glutCreateWindow ("hello");
    init ();
    glutDisplayFunc(display);
    glutMainLoop();
    return 0;
    }
     
  4. -Nuke-

    -Nuke- MacUser Mitglied

    Beiträge:
    2.135
    Zustimmungen:
    15
    MacUser seit:
    13.09.2003
    Hmm. Also bei mir funktioniert es so wie es soll.

    Mache mal folgendes:

    1. XCode starten.
    2. Neues C++-Tool als Projekt
    3. Links im Dateibaum, das Projekt "aufklappen", external Frameworks, dort das GLUT und das OpenGL FrameWork einfügen. Also dort wo auch libstc++ drinnen ist.
    4. Dein Code einfügen
    5. Ausführen
     
  5. Peter Stoffer

    Peter Stoffer Thread Starter MacUser Mitglied

    Beiträge:
    15
    Zustimmungen:
    0
    MacUser seit:
    18.02.2004
    Ich habe das Problem lösen können: Ich habe vergessen, OpenGL.framework zu importieren. Ausserdem musste ich libobjc.A.dylib importieren (keine Ahnung warum...).
     
  6. Corleone

    Corleone MacUser Mitglied

    Beiträge:
    67
    Zustimmungen:
    0
    MacUser seit:
    04.05.2003
    Wie macht man das jetzt?

    Hi,

    also ich hab glaube ich ein ähnliches Problem. Ich möchte einfach ein Code Stück in C mit der OpenGL Bibliothek (GLUT) compilieren und ausführen ohne XCode benutzten zu müssen, also einfach mit dem Terminal und gcc.

    Ich weiss, dass die Zeilen

    #include <OpenGl/gl.h>
    #include <OpenGl/glu.h>

    eigentlich wegfallen können, da ja schon GLUT importiert wird. Aber hab es sicherheitshalber gemacht. Das Programm lässt sich mit gcc fehlerfrei übersetzen aber nicht linken. Ich erhalte folgende Fehlermeldung:

    ld: warning prebinding disabled because of undefined symbols
    ld: Undefined symbols:
    _glBegin
    _glClear
    _glClearColor
    _glColor3f
    _glEnd
    _glFlush
    ...
    ....

    Muss ich auch irgendwie das OpenGl Framework unter MAC einbinden...?

    Oder wie läuft das jetzt mit OpenGL unter MAC, ohne irgendeine IDE???


    Der Code sieht folgendermaßen aus:

    #include <stdlib.h>
    #include <stdio.h>

    #include <OpenGl/gl.h>
    #include <OpenGl/glu.h>

    #include <GLUT/glut.h>


    void display(void)
    {

    /* clear all pixels */
    glClear(GL_COLOR_BUFFER_BIT);

    /* draw white polygon (rectangle) with corners at
    * (0.25, 0.25, 0.0) and (0.75, 0.75, 0.0)
    */

    glColor3f(1.0, 1.0, 1.0);
    glBegin(GL_POLYGON);
    glVertex3f(0.25, 0.25, 0.0);
    glVertex3f(0.75, 0.25, 0.0);
    glVertex3f(0.75, 0.75, 0.0);
    glVertex3f(0.25, 0.75, 0.0);
    glEnd();


    /* don't wait!
    * start processing buffered OpenGL routines
    */

    glFlush();
    }

    void init (void)
    {

    /* select clearing (background) color */
    glClearColor(0.0, 0.0, 0.0, 0.0);


    /*initialize viewing values */
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
    }

    /* Declare initial window size, position, and display mode
    * (single buffer and RGBA). Open Window with "hello"
    * in its title bar. Call initialization routines.
    * Register callback function to display graphics.
    * Enter main loop and process events.
    */

    int main (int argc, char** argv)
    {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(250, 250);
    glutInitWindowPosition(100,100);
    glutCreateWindow("hello");
    init();
    glutDisplayFunc(display);
    glutMainLoop();

    return 0;
    }



    Vielen Dank für die Hilfe.

    P.S.: Ich nutze Mac OS X Panther 10.3.3
     
  7. -Nuke-

    -Nuke- MacUser Mitglied

    Beiträge:
    2.135
    Zustimmungen:
    15
    MacUser seit:
    13.09.2003
    -framework GLUT -framework OpenGL

    anhängen an den Compilerbefehl. Also z.B. gcc -o Programm main.cpp -framework GLUT -framework OpenGL

    Dann musst zu aber glaube ich noch -Wl,/usr/lib/libobjc.A.dylib ranhängen. Keine Ahnung warum.

    Also:

    PHP:
    gcc -o Programm main.cpp -framework GLUT -framework OpenGL -Wl,/usr/lib/libobjc.A.dylib
     
  8. Corleone

    Corleone MacUser Mitglied

    Beiträge:
    67
    Zustimmungen:
    0
    MacUser seit:
    04.05.2003
    Danke vielmals, Nuke!

    so funktioniert.

    komisch nur, dass das kompilieren so lange dauert, bei so einem kleinen Programm!!!
     
Die Seite wird geladen...