我希望开始使用 C 或 C++ 进行一些 3D 编程。我遇到的问题是,似乎我能找到的唯一适用于 Mac OS 的教程使用 objective-c 和 Cocoa 框架。我想获得与 Windows 用户或多或少相同的环境。
如果我尝试使用文本编辑器和 g++ 编译器,我会丢失 header ,但是,如果我尝试使用 Xcode,我将不得不与 Cocoa 打交道,这让我很沮丧。我真的不明白为什么 Mac 上预装的 OpenGL/GLUT 会强制我使用 Xcode,但似乎没有它我就无法获取头文件。
我如何才能通过所有 Apple 的“开发人员友好”界面来编写一些具有完全跨平台可移植性的老式代码?
最佳答案
如果您想使用 OSX/Cocoa 的最新优势,Objective-C 的某些部分是不可避免的。将现有应用程序移植到 MacOS 的最简单方法如下:
- 用 Objective-C 编写“基本”nibless 应用程序。它只会是一个 AppDelegate 类和 main() 函数中的一些设置
- 在您在 AppDelegate 的 didFinishLaunching 事件处理程序中创建的窗口中添加自定义 NSGLView 后代
- 在 NSGLView 初始化中设置 CVDisplayLink 和渲染回调
- 在 CVDisplayLink 的回调中使用您现有的 OpenGL 渲染代码
现在是有趣的部分:从哪里获得所有这些?
令人惊讶的是,一个很好的 nibless 应用程序示例是 OSX 的 QEMU 端口(是的,模拟器)的 UI。此外,Apple 的官方 GLEssenstialPractices 演示显示了设置 OpenGL 渲染管道所需的所有信息。剩下的就看你了。
系统级 OSX 编程的详细和现代介绍可以在 Mark Dalrymple 的“Advanced Mac OS X Programming”一书中找到。它解释了很多事情,在阅读所有这些内容后,我理解了操作系统中的大部分设计决策(如果你从性能的角度考虑,它真的会让你接受所有“非标准”的东西)。
要完成“nibless”编程,我建议您阅读像这样的博客文章 http://blog.kleymeyer.com/2008/05/creating-cocoa-applications-programatically-ie-nib-less/谷歌搜索很有帮助。
同样的技巧适用于 CocoaTouch/iOS,并且在 SO 上回答了很多问题,比如这个 Cocoa touch/Xcode - generating NIB-less graphics context
关于c++ - 我如何从 Cocoa 中获取 'break away' 并在 C/C++ 中开发 Mac OpenGL 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10694594/