如何在OSX上运行OpenGL

时间:2010-07-06 17:13:03

标签: c++ macos opengl

我通常在Windows上编程,但我从学校获得了一个macbook pro,所以我正在尝试为OSX制作一个OpenGL应用程序。我下载并安装了XCode,但我不知道如何获得一个简单的OpenGL应用程序。我不想使用Objective-C,但我绝对不想使用GLUT。有人能指出我正确的方向吗?

6 个答案:

答案 0 :(得分:11)

OS X上的OpenGL与几乎所有其他内容之间的最大区别在于头文件的位置。在OS X上:

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

如果你想远离Objective-C / Cocoa和GLUT,你可以尝试SDL这是一个跨平台的游戏库(窗口,2D图形,声音,输入等)。

编辑:忘记了mipadi发布的编译器标志,即:

-framework OpenGL

答案 1 :(得分:7)

这个问题在互联网时代已经非常陈旧,但最简单的方法就是在Objective-C中涉足......抱歉。

我接近这个的一般方法如下:

  • 您可以继续使用C ++进行所有核心编程,没问题。
  • 在XCode中创建一个新的“Cocoa应用程序”。
  • 在界面构建器(编辑.xib文件的位置)中,在对象浏览器中找到NSOpenGLView对象,然后在窗口中将其打开。
  • 此位重要:在对象检查器中,将子类更改为您自己的子类(仍需要进行)。您可以将其命名为任何名称,例如MyRenderer或其他。
  • 点击[cmd] + [n]并创建一个新的Objective-C类MyRendere r。
  • 重要!将扩展名从MyRenderer.m更改为MyRenderer.mm。这样,XCode就知道它必须为Objective-C ++而不是Objective-C进行编译。
  • 在MyRenderer.mm中,至少覆盖以下NSOpenGLView的方法。
    • - (void) awakeFromNib:在这里进行类初始化。 请勿在此处初始化OpenGL,否则您的程序将崩溃。
    • - (void) drawRect:(NSRect)dirtRect:在这里做你的绘画。
    • - (void) prepareOpenGL:在此处初始化OpenGL。
    • - (void) reshape:(NSRect)bounds:用于调整视图的大小。

好消息是你可以在MyRenderer.mm中自由混合C ++函数和类。 您还可以使用C ++ #include指令以及Objective-C #import指令。你可以在drawRect里面做C ++而没有任何问题。

坏消息是NSOpenGLView 每隔x毫秒不会重绘场景。只有在感觉有必要时才会重绘场景。你必须为此使用Cocoa的NSTimer类。

修改:额外注意:在drawRect方法中,请务必致电glFlush()以及[[self openGLContext] flushBuffer]。出于某种原因,只有调用[[self openGLContext] flushBuffer]才能在视图上绘制任何内容。

答案 2 :(得分:2)

我一直在使用这个网站作为我对Window,Mac和Linux项目的参考。 http://ysflight.in.coocan.jp/programming/fssimplewindow/e.html

作者设法编写了一些很好的例子,可以帮助你在所有平台上使用你的项目。

最后一点是,您必须使用Objective-C创建窗口,并且可以使用C ++编写其余代码。

答案 3 :(得分:1)

在Mac OS X上使用OpenGL时,有两点需要注意:

一,你必须链接OpenGL框架。在Xcode之外,您可以将-framework标志传递给链接器:

$ gcc -framework OpenGL -o my_opengl_program my_opengl_program.c

(请注意,此标志仅适用于OS X.)

如果您使用的是Xcode,则可以将OpenGL.framework添加到链接的框架中。

二,前缀为OpenGL/&gt;在OpenGL标头前面。例如,要包含gl.h,请使用:

#include <OpenGL/gl.h>

否则,在Mac OS X上使用OpenGL进行编程几乎是一样的。

答案 4 :(得分:1)

由于您在Mac上进行编程,因此您可以使用您熟悉的任何语言。 XCode支持编译C ++,所以如果你熟悉Windows上的OpenGL,那么这是一个直接的过渡,尽管你需要使用正确的方法来创建一个OSX窗口(最有可能的可可)。

如果python是你的,那么PyOpenGL是一个跨平台的OpenGL的Python绑定。

答案 5 :(得分:0)

非Objective C库是AGL