2010-01-04 4 views
6

Ich versuche opengl in 2d Raum zu ziehen, und die folgende tue, aber es kompiliert gewohnt:Mit OpenGL ES Funktionen auf einem Mac

int vPort[4]; 
    glGetIntegerv(GL_VIEWPORT, vPort); 

    glMatrixMode(GL_PROJECTION); 
    glPushMatrix(); 
    glLoadIdentity(); 

    glOrthof(0, vPort[2], 0, vPort[3], -1, 1); 
    glMatrixMode(GL_MODELVIEW); 
    glPushMatrix(); 
    glLoadIdentity(); 

Ich habe den OpenGL.framework Rahmen enthalten, die Compiler Spur sagt folgendes.

In function '-[OpenGLView drawRect:]': 
    warning: implicit declaration of function 'glOrthof' 

Ld build/Debug/OpenGLTest1.app/Contents/MacOS/OpenGLTest1 normal x86_64 
/Developer/usr/bin/gcc-4.2 -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.6.sdk -  L/Users/user/Documents/cocoa/OpenGLTest1/build/Debug -F/Users/user/Documents/cocoa/OpenGLTest1/build/Debug -filelist /Users/user/Documents/cocoa/OpenGLTest1/build/OpenGLTest1.build/Debug/OpenGLTest1.build/Objects-normal/x86_64/OpenGLTest1.LinkFileList -mmacosx-version-min=10.6 -framework Cocoa -framework OpenGL -o /Users/user/Documents/cocoa/OpenGLTest1/build/Debug/OpenGLTest1.app/Contents/MacOS/OpenGLTest1 

Undefined symbols: 
    "_glOrthof", referenced from: 
     -[OpenGLView drawRect:] in OpenGLView.o 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 

Ich habe keine Ideen, wie man es beheben kann. Mein Ziel ist derzeit eine Desktop-App, aber ich habe vor, eine iPhone-App schließlich zu machen.

+0

Wie haben Sie Framework eingebunden? Hier ist Beispiel https://www.youtube.com/watch?v=3FdVLJT12d4 – Sergei

Antwort

6

Haben Sie die entsprechenden Header eingefügt?

Auf dem Mac diese

#import <OpenGL/OpenGL.h> 

sind und möglicherweise

#import <GLUT/GLUT.h> 

Auf dem iPhone sind sie

#import <OpenGLES/EAGL.h> 
#import <OpenGLES/EAGLDrawable.h> 
#import <OpenGLES/ES1/gl.h> 
#import <OpenGLES/ES1/glext.h> 

Auch, wenn ich mich nicht irre, glOrthof() ist OpenGL-ES-spezifisch. Möglicherweise müssen Sie glOrtho() auf dem Mac verwenden.

+2

1. Importieren von Dingen wird nicht beheben einen Linker-Fehler. 2. Der Titel besagt, dass der Fragesteller OpenGL ES auf dem iPhone verwendet. –

+1

Sie haben Recht mit den Linker-Fehlern, das habe ich verpasst.Er sagt "Mein Ziel ist derzeit eine Desktop-App", also sieht es für mich so aus, als ob er zuerst versucht, Code zu verwenden, der für das iPhone auf dem Mac bestimmt ist. Das könnte die Linkerprobleme mit glOrthof() verursachen. –

+2

Oooh. Guter Fang. –

2

ich den OpenGL.framework Rahmen enthalten sind, ...

Sie enthalten keine Frameworks. Sie enthalten Header (oder importieren) und verknüpfen sie mit Frameworks. In Verbindung damit kommt nur die Warnung in Ihrer Ausgabe vom Compiler; alles nachdem es vom Linker kommt (ld).

Der Compiler und Linker beschweren sich nicht, dass keine anderen dieser Funktionen existieren, so Ihr Problem ist einfach, dass diese Funktion nicht existiert. Da es nicht existiert, wird es nicht im Header deklariert (daher die Compiler-Warnung) oder vom Framework exportiert (daher der Linker-Fehler).

Stellen Sie sicher, dass Sie das OpenGL-Framework aus dem iPhone SDK und nicht aus Ihrem Systemordner (Mac OS X) verwenden. Sie sind anders und ich weiß, dass mein Mac OS X OpenGL.framework keine glOrthof Funktion hat. Entfernen Sie das OpenGL-Framework, das Sie jetzt in Ihrem Projekt haben, und fügen Sie das iPhone OpenGL-Framework mit dem Befehl "Vorhandene Frameworks hinzufügen" hinzu, der angezeigt wird, wenn Sie mit der rechten Maustaste auf eine Gruppe in Ihrem Xcode-Projekt klicken.

Mein Ziel ist es zur Zeit eine Desktop-Anwendung, ...

Dann sind Sie gehen zu müssen, einen Ersatz für die glOrthof Funktion zu finden, weil es nicht auf dem Mac nicht gibt. (Danke an Brad Larson für diesen Teil der Frage.)

+0

Wie immer, danke für Ihre unschätzbare Hilfe! – Jacob

2

Sie würden einfach glOrtho auf Vanille GL verwenden. GL ES unterstützt feste und Gleitkomma-Datentypen, daher die Funktionen glOrthox und glOrthof.