2012-08-16 24 views
2

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

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

我的问题是我如何编译OpenGL代码而不会搞乱Cocoa和Objective-C。这背后的主要原因是,因为我想部署跨平台应用程序,我想尽可能地使用C++。虽然这是真的,但如果我需要使用一点Objective-C和Cocoa,那就不是那么大的问题了。但我想用C++来获取我的主项目代码,并且Objective-C/Cocoa的可能数量较少,通过“主项目代码”了解特定于我的应用程序的代码,例如我的类,对象以及与应用程序的目的,即。 ,代码的主体。

如果使用C++/OpenGL而不搞乱Obj-C/Cocoa在复杂性方面是不值得的,那么这个问题可以被重新表述为简单的在Xcode中编译简单的OpenGL代码的方式是什么?

回答

2

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

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

有些项目已经封装了各种特定于平台的API,以便为创建上下文以及处理OpenGL范围之外的窗口和其他事件提供便携式API。从OpenGL开始时最常用的是GLUT。 OS X为GLUT提供了一个框架,但它尚未更新为使用OS X的最新OpenGL支持,并且仍然停留在OpenGL 2.x上。随着OpenGL Core配置文件在2.x和3.x之间的引入,OpenGL API发生了很大的变化。这意味着你目前无法使用GLUT在OS X上编写一个现代的OpenGL程序。

此外,由于其跨平台性,GLUT永远无法提供符合平台标准的体面GUI。提供一个像样的图形用户界面通常意味着直接使用特定于平台的API,或者至少在设计具有特定平台的图形用户界面时。

平台之间的另一个区别是,在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工具访问方式的差异。

+0

FreeGLGL不能在OSX上工作吗? – 2012-08-16 16:23:31

+1

@NicolBolas从未尝试过。我看到他们最近的新闻项目提到了对OS X的改进支持,所以我认为它在某种程度上有效。 GLFW是另一个在OS X上声称支持OpenGL 3.2+的跨平台库,所以也许这是一个不错的选择。 – bames53 2012-08-16 16:39:08

0

OpenGL非常值得学习。 的OpenGL基于C的,与平台无关的API

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

我推荐使用 GLUT为你平台独立的窗口工作。找到 here

使用freeglut对于您平台独立的窗口工作将有所帮助。找到here

+0

不要讷河的教程依赖Windows API?所以它在Mac上不会很有用。 – Kevin 2012-08-16 14:10:49

+2

-1:推荐NeHe过时的教程。那里有许多更好的选择。我不是*只是谈论我的。 – 2012-08-16 14:11:27

+0

@Kevin每页底部都有各种社区端口。其中大多数至少有GLUT和SDL端口。 – Bojangles 2012-08-16 14:12:05

2

由于Qt的可以很容易地进行跨平台的应用,可能是不错的考虑这个API。他们有OpenGL模块,你可以在XCode中设置它:http://qtnode.net/wiki/Qt4_with_Xcode

+0

+1:当我看到这个问题时,我的第一个想法。 – 2012-08-16 23:55:14