0

我一直在研究 Mac OS X 上的 OpenGL 编程。虽然对于那些用纯 C、C++ 甚至 Python 进行编程的人来说,关于这个主题的信息量相当可观,但对于 Objective-C/Cocoa 开发人员来说却很少,而且还有很多存在已经过时了(我们说的是 2002-2006 年,技术上的一个永恒之前)。正因为如此,很难找到准确、最新的信息,导致我提出这个问题:Obj-C/Cocoa 开发人员现在最常通过什么途径使用 OpenGL(特别是在 3D 渲染中)?

此外,我被引导相信大部分 OpenGL 都没有 Objective-C/Cocoa 绑定。这是真的?

如有必要,我可以学习另一种语言,但如果可能的话,我更愿意坚持使用 Obj-C,这样我就可以专注于学习 OpenGL 而不是整个编程语言(C++ 看起来特别令人生畏)。

4

3 回答 3

3

据我所知,OpenGL 函数没有 Obj-C 包装器,所以你不得不使用 C API。此外,尝试将其包装在对象中是没有用的,因为编写 3D 图形完全是为了性能,使用 C 函数比使用对象的方法快得多。

Objective-C 基于 C,因此您可以在 Cocoa 应用程序中自由使用 C OpenGL API。至于绑定,在 Cocoa 中,您可以将 NSOpenGLView 子类化以绑定到 OpenGL。您可以覆盖以下方法:

- (void)prepareOpenGL;生成纹理、设置绘图状态等。

- (void)reshape;在调整视图大小时更新您的投影。

最重要的是,您可以覆盖:

- (void)drawRect:做你的自定义绘图。

于 2012-06-26T09:28:07.647 回答
1

到目前为止,没有广泛的 Objective-C 绑定到 OpenGL。如果你有 Apple 开发者帐户,我建议你查看今年的 WWDC 视频,看看在不久的将来这种情况是否会发生变化。

如果您想了解如何使用 Objective-C/Cocoa 中的 OpenGL 3.2,请查看我之前创建的教程

于 2012-06-27T09:48:43.277 回答
1

由于 Objective-C 是 C 的超集,您可以在 Objective-C 代码中/从其中自由地包含/调用 C 代码。同样,Objective-C++(扩展名为.mm)可以允许 Onjective-C++ 中的 C++ 模块。我相信这是 Cocoa 没有为 OpenGL API 提供包装器的主要原因。

我会将整个 OpenGL 部分与使用MVC 设计的 Cocoa 项目分开。即编写一个Model组件,包含所有用C/C++编写的OpenGL代码,并在Cocoa内部制作Controllere和View组件,例如NSOpenGLView可以是Controller和View组件。

MVC 的主要优点是模型组件(OpenGL 部分)完全独立于操作系统,无需任何修改即可在其他平台上复用。缺点是您需要在 Cocoa 环境中同时使用 C/C++ 和 Objectivie-C。

我有一个使用 MVC 设计(带有源代码)的 OpenGL GUI 程序示例。Windows 和 Mac 版本都使用相同的 OpenGL 模块。

于 2012-06-27T14:04:03.420 回答