2010-01-04 16 views
6

estoy tratando de dibujar en el espacio 2d OpenGL, y estoy haciendo lo siguiente, sin embargo, no lo puedo compilar:Uso de las funciones de OpenGL ES en un 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(); 

He incluido el marco OpenGL.framework, La traza del compilador dice lo siguiente.

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 

Se me acabaron las ideas sobre cómo solucionarlo. Mi objetivo es actualmente una aplicación de escritorio, pero mi objetivo es hacer una aplicación para el iPhone con el tiempo.

+0

¿Cómo incluiste el framework? Aquí está la muestra https://www.youtube.com/watch?v=3FdVLJT12d4 – Sergei

Respuesta

6

¿Ha incluido los encabezados apropiados?

En el Mac, estos son

#import <OpenGL/OpenGL.h> 

y posiblemente

#import <GLUT/GLUT.h> 

En el iPhone son

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

Además, si no me equivoco, glOrthof() es específico de OpenGL-ES. Es posible que necesite usar glOrtho() en la Mac.

+2

1. La importación de cosas no arreglará un error del enlazador. 2. El título dice que el interrogador está utilizando OpenGL ES en el iPhone. –

+1

Tienes razón sobre los errores del enlazador, me lo perdí.Él dice "Mi objetivo es actualmente una aplicación de escritorio", por lo que me parece que está tratando de usar el código destinado para el iPhone en la Mac primero. Eso podría causar los problemas del enlazador con glOrthof(). –

+2

Oooh. Buena atrapada. –

2

He incluido el marco OpenGL.framework ...

No incluya marcos. Incluyes (o importas) encabezados y enlaces contra marcos. Relacionado, solo la advertencia en su salida proviene del compilador; todo después de que proviene del enlazador (ld).

El compilador y el enlazador no se quejan de que ninguna otra de esas funciones exista, por lo que su problema es simplemente que esa función no existe. Como no existe, no se declara en el encabezado (de ahí la advertencia del compilador) ni se exporta por el marco (de ahí el error del enlazador).

Asegúrese de estar utilizando el marco OpenGL desde el SDK de iPhone, no desde la carpeta del sistema (Mac OS X). Son diferentes, y sé que mi Mac OS X OpenGL.framework no tiene una función glOrthof. Elimine ahora el marco OpenGL que tiene en su proyecto y agregue el marco OpenGL para iPhone usando el comando "Agregar marcos existentes" que aparece cuando hace clic con el botón derecho en un grupo en su proyecto Xcode.

Mi objetivo es actualmente una aplicación de escritorio, ...

, entonces vamos a tener que encontrar un sustituto para esa función glOrthof, ya que no existe en el Mac. (Gracias a Brad Larson por señalar esta parte de la pregunta).

+0

Como siempre, ¡gracias por su valiosa ayuda! – Jacob

2

Simplemente usará glOrtho en vanilla GL. GL ES admite tipos de datos de punto fijo y flotante, de ahí las funciones glOrthox y glOrthof.

Cuestiones relacionadas