在Mac上使用OpenGL ES功能

时间:2010-01-04 12:22:15

标签: xcode macos opengl-es

我正在尝试将opengl绘制到2d空间,并且正在执行以下操作,但它不会编译:

    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();

我已经包含了OpenGL.framework框架,编译器跟踪说明如下。

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

我已经没有关于如何修复它的想法了。我的目标目前是桌面应用程序,但我的目标是最终制作iPhone应用程序。

3 个答案:

答案 0 :(得分:6)

您是否包含了相应的标题?

在Mac上,这些是

#import <OpenGL/OpenGL.h>

可能

#import <GLUT/GLUT.h>

在iPhone上,他们是

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

另外,如果我没弄错的话,glOrthof()是特定于OpenGL-ES的。您可能需要在Mac上使用glOrtho()。

答案 1 :(得分:2)

  

我已经包含了OpenGL.framework框架......

您不包含框架。您包含(或导入)标题并链接到框架。相关地,只有输出中的警告来自编译器;它之后的所有内容都来自链接器(ld)。

编译器和链接器并没有抱怨这些函数中的任何其他函数都不存在,因此您的问题只是该函数不存在。因为它不存在,所以它不会在头文件中声明(因此编译器警告)或由框架导出(因此链接器错误)。

确保您使用的是iPhone SDK中的OpenGL框架,而不是您的(Mac OS X)系统文件夹。它们不同,我知道我的Mac OS X OpenGL.framework没有glOrthof功能。立即删除项目中的OpenGL框架,并使用右键单击Xco​​de项目中的组时出现的“添加现有框架”命令添加iPhone OpenGL框架。

  

我的目标目前是桌面应用,...

然后你需要找到glOrthof函数的替代品,因为它在Mac上不存在。 (感谢Brad Larson指出这部分问题。)

答案 2 :(得分:2)

你只需要在香草GL上使用glOrtho。 GL ES支持固定和浮点数据类型,因此支持glOrthox和glOrthof函数。