6

我希望开始使用 C 或 C++ 进行一些 3D 编程。我遇到的问题是,我可以找到的唯一适用于 Mac OS 的教程似乎使用了 Objective C 和 Cocoa 框架。我想或多或少地获得与 Windows 用户相同的环境。

如果我尝试使用文本编辑器和 g++ 编译器,我会丢失标题,但是,如果我尝试使用 Xcode,我将不得不与 Cocoa 作斗争,这让我很沮丧。我真的不明白为什么预装在 Mac 上的 OpenGL/GLUT 会强迫我使用 Xcode,但没有它我似乎无法获得头文件。

我如何才能通过所有 Apple 的“开发人员友好”界面来编写一些具有完全跨平台可移植性的老式代码?

4

3 回答 3

5

如果您想使用 OSX/Cocoa 的最新优势,Objective-C 的某些部分是不可避免的。将现有应用程序移植到 MacOS 的最简单方法如下:

  1. 在 Objective-C 中编写“基本”的 nibles 应用程序。它只是一个 AppDelegate 类和 main() 函数中的一些设置
  2. 在 AppDelegate 的 didFinishLaunching 事件处理程序中创建的窗口中添加自定义 NSGLView 后代
  3. 在 NSGLView 初始化中设置 CVDisplayLink 和渲染回调
  4. 在 CVDisplayLink 的回调中使用现有的 OpenGL 渲染代码

现在是有趣的部分:从哪里获得所有这些?

令人惊讶的是,OSX 的 QEMU 端口(是的,模拟器)的 UI 是一个很好的简单应用程序示例。Apple 的官方 GLEssenstialPractices 演示还显示了设置 OpenGL 渲染管道所需的所有信息。其余的都取决于你。

可以在 Mark Dalrymple 的“Advanced Mac OS X Programming”一书中找到对系统级 OSX 编程的详细而现代的介绍。它解释了很多事情,在阅读了所有这些之后,我已经理解了操作系统中的大部分设计决策(如果你从性能的角度考虑,它真的会让你接受所有“非标准”的事情)。

为了完成“nibless”编程,我建议你阅读这样的博客文章http://blog.kleymeyer.com/2008/05/creating-cocoa-applications-programatically-ie-nib-less/谷歌搜索有很大帮助。

相同的技巧适用于 CocoaTouch/iOS,并且在 SO 上回答了很多问题,例如Cocoa touch/Xcode - generate NIB-less graphics context

于 2012-05-22T08:31:34.970 回答
2

如果您想创建跨平台应用程序,您可以使用命令行工具模板创建一个项目。接下来,导入 OpenGL 和 GLUT 框架。这将为您提供一个带有所需 OpenGL 和 GLUT 标头的“空白”C++ 项目。

Lighthouse 3D 为您提供了一些关于可移植性以及如何启动您的第一个项目的提示。 http://www.lighthouse3d.com/tutorials/glut-tutorial/initialization/

于 2012-10-10T15:23:54.080 回答
-1

我创建了一个软件层(名为cocoglut),它允许将基本或基本的 GLUT 调用转换为 COCOA。这个库允许从 C/C++ 应用程序创建/销毁窗口并注册回调,只需使用 GLUT 调用,而不需要 nib 文件或 XCode 项目文件(并且可以从命令行编译)。此选项使用全视网膜显示分辨率。源代码在GitHub 上

于 2015-12-17T18:16:59.770 回答