2011-08-29 120 views
3

我打算買一本關於OpenGL的書,但是我有幾個問題應該學到什麼。OpenGL vs OpenGL ES和OpenGL 1.x vs OpenGL 2.0要學什麼?

我在學習OpenGL 1.x或OpenGL 2.0之間徘徊,因爲OpenGL ES 2.0只存在於3G及更高版本,如果我要開發一個應用程序並將其放置在應用程序商店,我想要每個人都可以使用該應用程序的iPhone。

另外,我想用桌面OpenGL進行實驗。

所以,我的問題如下:

簡單地說,我應該怎麼來學習?如果我學習桌面OpenGL,是否可以輕鬆轉移到OpenGL ES?就像我知道C/C++中的OpenGL一樣,我是否也知道OpenGL ES,那裏有什麼重大差異?

另外,你會推薦我學習1.x和2.0,因爲我之前說過的具體原因,我希望所有的iPhone所有者能夠使用我的應用程序,不僅僅是3G和更高?

最後,有沒有你會推薦的書?我非常喜歡this教程的風格。它很容易遵循,顯示了很多代碼,並仔細解釋了每行代碼。

回答

4

我自己也面臨同樣的問題,我的決定是去OpenGL ES 2.0。首先是因爲the great majority of iOS devices in use today can run it(iPhone 3GS或更好)。其次,因爲OpenGL的未來是着色器,因爲它們比ES 1的固定管線提供了更多的靈活性。

這就是說,我會補充說使用着色器並不容易。在ES 2中設置所有內容比在ES 1中設置要花費更多的精力。更多的事情可能會出錯,更多的時候你會看到你的程序創造的只是一個空白的屏幕,讓你撓撓腦袋,想知道爲什麼。

一旦你瞭解了基礎知識,ES 2並不是那麼糟糕。這只是一個非常陡峭的學習曲線。

至於桌面與ES問題,我會建議學習ES。這是一個很好的OpenGL函數子集,可以讓你編寫運行在更多平臺上的程序。如果您想將代碼移植到ES,使用完整的OpenGL可能會讓您陷入麻煩,因爲它的某些方面不會進行翻譯。

爲了讓你開始使用OpenGL ES 2,我強烈推薦使用this tutorialthis book

+1

非常感謝,非常有用的帖子。 –

1

OpenGL ES 1.1使用了許多舊的棄用功能,而OpenGL ES 2.0使用現代着色器的頂點陣列/緩衝區方法,以備將來使用。如果你學習桌面GL,使用OpenGL ES不會有太多困難,因爲它們非常相似。

如果你真的想使用舊式的OpenGL ES 1.1,那麼我建議你學習桌面OpenGL 2.0(最好用「OpenGL編程指南」/「紅皮書」完成),它會教你舊的立即API以及現代頂點數組/緩衝區功能以及(結合「OpenGL着色語言」/「橙皮書」一書)也使用可編程着色器。因此,這樣您就可以使用舊式(1 /(2))和現代((2)/ 3/4)桌面GL以及OpenGL ES 1.1和2.0。

但是如果你想直接與編程的OpenGL的新的和現代的方式開始(這可能是可取的,但老式的是一個寶貴的經驗),那我寧願建議使用最新版「OpenGL SuperBible」,它將教你現代風格的((2)/ 3/4)桌面OpenGL,而不需要舊的棄用功能。但是,很多OpenGL ES 1.1代碼對你來說並沒有什麼用處(儘管你一定會明白它的原理)。雖然我非常欣賞我對固定功能舊式OpenGL的瞭解,但我寧願建議初學者立即從現代OpenGL開始,即使對於初學者來說學習有點困難,因爲這是今天(和明天)做硬件加速的實時圖形。

但真正重要的是,與通過介意學習API不同,您應該一般理解3D圖形的基本原理和原理。那麼無論如何,切換到其他API(如Direct3D)都不會有太大困難。