2012-08-16 25 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