【问题标题】:Using C++ together with OpenGL in Xcode在 Xcode 中使用 C++ 和 OpenGL
【发布时间】:2012-08-12 21:37:46
【问题描述】:

我的目标是在 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 代码的方法是什么?

【问题讨论】:

    标签: c++ objective-c xcode opengl xcode4


    【解决方案1】:

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

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

    我建议您使用 GLUT 来进行与平台无关的窗口工作。找到here

    使用 freeglut 为您独立于平台的窗口工作会有所帮助。找到那个here

    【讨论】:

    • NeHe的教程不依赖windows API吗?所以它在 Mac 上不会很有用。
    • -1:用于推荐 NeHe 过时的教程。有很多很多更好的选择。而且我不是只是在谈论我的。
    • @Kevin 每个页面底部都有各种社区端口。其中大多数至少有 GLUT 和 SDL 端口。
    • @JamWaffles,你说得对,我在前几个教程中看到了“Mac OS”端口。但奇怪的是,它们都链接到“未找到页面”页面。该死的运气!
    • 另外,由于 GLUT 最后一次更新是在 97 年,因此最好推荐 freeglut
    【解决方案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 工具的方式的差异。

    【讨论】:

    • @NicolBolas 从未尝试过。我看到他们最近的新闻提到改进了对 OS X 的支持,所以我认为它在某种程度上可以工作。 GLFW 是另一个跨平台库,声称在 OS X 上支持 OpenGL 3.2+,所以也许这是一个不错的选择。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      • 2018-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多