2010-01-04 53 views
6
利用OpenGL ES功能

我想画的OpenGL为二维空间,我做以下,但它不会编译:在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(); 

我已经包括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应用程序。

+0

你是如何包含框架的?这里是示例https://www.youtube.com/watch?v=3FdVLJT12d4 – Sergei 2016-11-01 12:12:57

回答

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

+2

1.导入东西不会解决链接器错误。 2.标题表示提问者在iPhone上使用OpenGL ES。 – 2010-01-04 14:07:45

+1

你是对的链接器错误,我错过了。他确实说过“我的目标目前是桌面应用程序”,所以它看起来像他试图首先在Mac上使用iPhone上的代码。这可能会导致glOrthof()的链接器问题。 – 2010-01-04 14:15:27

+2

Oooh。接得好。 – 2010-01-04 15:29:06

2

我已经包括OpenGL.framework框架...

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

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

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

我的目标是目前一个桌面应用程序,...

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

+0

一如既往,感谢您的宝贵帮助! – Jacob 2010-01-04 19:41:06

2

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