我通常在Windows上进行编程,但是学校给了我一台MacBook Pro,所以我正在尝试为OSX制作一个OpenGL应用程序。我下载并安装了XCode,但我不知道如何启动一个简单的OpenGL应用程序。我更喜欢不使用Objective-C,但我绝对不想使用GLUT。有人能指点我方向吗?
#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#include <GLUT/glut.h>
-framework OpenGL
这个问题在互联网上已经非常老了,但是最简单的方法就是涉足 Objective-C 语言... 对不起。
我的一般处理方式如下:
NSOpenGLView
对象,并将其拖到窗口上。MyRenderer
或其他任何名称。MyRendere
r。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]
不会在我的视图上绘制任何内容。
在 Mac OS X 上使用 OpenGL 时,有两件事需要记住:
第一,你必须链接 OpenGL 框架。在 Xcode 之外,你可以向链接器传递 -framework
标志:
$ gcc -framework OpenGL -o my_opengl_program my_opengl_program.c
OpenGL.framework
添加到链接的框架中。OpenGL/
前缀。例如,要包含gl.h
,请使用:#include <OpenGL/gl.h>
wglCreateContext
是特定于 Windows 的(据我所知),那么在 Mac OS X 上,您不会使用它。但是,您可以仅使用 OpenGL 函数来编写 OS X 上的OpenGL程序。 - mipadi如果你在 Mac 上进行编程,你可以使用任何你熟悉的语言。XCode 支持编译 C++,因此如果你在 Windows 上熟悉 OpenGL,那么这是一个简单直接的过渡,但是你需要使用适当的方法来创建 OSX 窗口(很可能是 Cocoa)。
如果 Python 是你的菜,PyOpenGL 是一个跨平台的 Python 绑定 OpenGL。