如何在OSX上运行OpenGL

Ern*_* Jr 12 c++ opengl macos

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

Nik*_*chi 11

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

#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#include <GLUT/glut.h>
Run Code Online (Sandbox Code Playgroud)

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

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

-framework OpenGL
Run Code Online (Sandbox Code Playgroud)


rwo*_*ols 7

这个问题在互联网时代非常古老,但最直接的方式就是在Objective-C中哄骗你的脚...抱歉.

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

  • 您可以继续使用C++进行所有核心编程,没问题.
  • 在XCode中创建一个新的"Cocoa应用程序".
  • 在界面构建器(编辑.xib文件的位置)中,NSOpenGLView在对象浏览器中查找对象,然后在窗口中将其打开.
  • 这一点很重要:在对象检查器中,将子类更改为您自己的子类(仍需要进行).例如,您可以将其命名为任何名称MyRenderer.
  • 点击[cmd] + [n]并创建一个新的Objective-C类,MyRenderer.
  • 重要!将扩展名从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指令.你可以在里面做C++ drawRect没有问题.

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

编辑:额外注:在drawRect方法,请确保调用glFlush()以及[[self openGLContext] flushBuffer].出于某种原因,只有调用[[self openGLContext] flushBuffer]不会在视图上为我绘制任何内容.