2

我的目标是在 C++ 和 OpenGL 中开发基于跨平台的应用程序。

由于我使用的是 Macbook Pro,它的自然 IDE 是 Xcode,所以我想使用它。通过使用命令行工具作为项目的模板,我已经成功地在 Xcode 中编译了纯 C++ 代码。

我的问题是如何编译 OpenGL 代码而不弄乱 Cocoa 和 Objective-C。这背后的主要原因是,由于我想部署跨平台的应用程序,所以我想尽可能地坚持 C++。

虽然这是真的,但如果我必须使用一点 Objective-C 和 Cocoa,那也不是什么大问题。但是我想在 C++ 中获取我的主要项目代码和尽可能少的 Objective-C/Cocoa,通过“主要项目代码”来理解我的应用程序特定的代码,例如我的类、对象和与应用程序的目的,即。,代码的主体。

如果在不使用 Obj-C/Cocoa 的情况下使用 C++/OpenGL 在复杂性方面不值得,那么问题可以简单地重新表述为在 Xcode 中编译简单 OpenGL 代码的方法是什么?

4

3 回答 3

2

OpenGL 是一个跨平台 API,但是它非常特定于在现有图形上下文上执行图形操作,并且不包括创建这样的上下文或处理窗口事件或任何其他需要与平台特定功能集成的东西。这留给平台特定的 API。

每个平台的 OpenGL 实现将包括用于执行必要任务的平台特定 API。Windows 有 WGL,X11 有 GLX,OS X 有低级别的 CGL 或高级别的 NSOpenGLView。如果没有在某些级别上使用这些特定于平台的 API,就无法使用 OpenGL。此外,仅仅获得任何类型的 GUI 都需要这种特定于平台的相同类型的代码。

有些项目包装了各种特定于平台的 API,以提供可移植的 API 来创建上下文并处理 OpenGL 范围之外的窗口和其他事件。开始使用 OpenGL 时最常用的一种是 GLUT。OS X 提供了一个带有 GLUT 的框架,但是它还没有更新为使用 OS X 最新的 OpenGL 支持,并且仍然停留在 OpenGL 2.x 上。在 2.x 和 3.x 之间引入了 OpenGL Core 配置文件后,OpenGL API 发生了很大变化。这意味着您目前不能使用 GLUT 在 OS X 上编写现代 OpenGL 程序。

此外,由于其跨平台特性,GLUT 永远无法提供符合平台标准的体面的 GUI。提供一个像样的 GUI 总是意味着直接使用特定于平台的 API,或者至少在设计 GUI 时考虑到特定的平台。

平台之间的另一个区别是,在 OS X 上,您可以使用任何支持的 OpenGL 版本,只需包括标准 OpenGL 头文件和调用函数并使用标识符,就像使用任何其他库一样。在 Windows 上,OpenGL 标头不提供任何超过 OpenGL 1.2 的东西,这是古老的,并且使用任何更新的 OpenGL 工具意味着通过 OpenGL 的扩展机制访问它。还有另一个库 GLEW,旨在使在这些情况下使用 OpenGL 变得可以忍受。

所以 OpenGL 是一个跨平台的 API,但您很可能需要在核心 OpenGL 代码周围使用一些特定于平台的代码才能有效地使用它。GLUT 可能是一个很好的跨平台选项,至少对于学习 OpenGL 来说是这样,只是它尚未在 OS X 上更新以支持 OpenGL 3.x 引入的 OpenGL Core 配置文件。但即使使用 GLUT,您也必须通过 OpenGL 扩展机制或直接通过最新的标头来处理访问 OpenGL 设施的方式的差异。

于 2012-08-16T16:13:19.240 回答
2

由于 Qt 可以轻松地制作跨平台应用程序,因此考虑使用此 API 可能会很好。他们有 OpenGL 模块,您可以在 XCode 中进行设置:http: //qtnode.net/wiki/Qt4_with_Xcode

于 2012-08-16T16:45:43.697 回答
0

OpenGL非常值得花时间学习。OpenGL是一个基于 C 的、平台中立的 API

尝试从这里开始学习 GL 的基础知识。

我建议您使用GLUT进行平台无关的窗口工作。在这里找到

为您的平台独立窗口工作使用freeglut会有所帮助。在这里找到

于 2012-08-16T14:07:14.827 回答