2012-12-19 93 views
2

我目前正在通過第五代Superbible學習OpenGL。它教你核心檔案。但我真的很困惑。已棄用OpenGL函數

我知道,Khronos的3.3取下固定管線,並宣佈一些功能過時。但Superbible現在只是用他們自己的功能取代那些被棄用的功能。

爲什麼要刪除的Khronos像glRotate或matrixstack有些事情讓我不得不使用第三方庫(或我自己),而不是正式的嗎?

也許宇宙有瑕疵?

+1

你的大部分問題都在這裏回答:http://www.gamedev.net/topic/509060-learning-strict-opengl3/ – Dan

回答

6

glRotate()等是因爲與矩陣openGL的內部交易去除所以它只是你直接供應矩陣更清潔的設計。

幾乎所有任何複雜的openGL應用程序都會做一堆其他矩陣的東西,而且會有自己的矩陣類,這樣openGL就可以更輕鬆地得到結果,而不是堅持從一堆旋轉中創建它們/翻譯/縮放呼叫。

他們可以提供自己的矩陣類 - 但也有很多,你可以使用第三方庫的。 openGL的策略之一(失敗)是它依賴於第三方庫來執行實際圖形之外的任何事情。因此,初學者程序是GLUT,GLEW,SDL等在屏幕上獲取任何內容的棘手組合,而DirectX擁有一切開箱即用的功能。

+0

「矩陣類」 - 不,他們不能,因爲這會限制OpenGL API到這些類庫已經開發的語言。 OpenGL是語言中立的,只定義程序入口點應遵循主機系統的C調用約定。 – datenwolf

+0

DirectX是庫的集合(包括用於圖形的Direct3D),而OpenGL是單個庫。該策略是一個陷阱,它需要更多的樣板代碼/設置才能正常工作,但它的好處在於它比Direct3D更便於移植。 –

+0

@RobertRouhani缺乏可移植性僅僅是因爲DirectX在商業上只能從MS獲得。沒有什麼技術可以阻止Khronos將SDL/GLEW類型函數包含在OpenGL中 –

3

Khronos的刪除這些功能從核心配置文件,但他們仍然在兼容性的人可用。 主要原因是性能:

在現在的大多數應用程序中,呈現器和應用程序之間必須傳遞的信息量要比十年前大得多。因此,ARB提出了緩衝區(頂點數組和頂點緩衝區對象),以最大限度地利用主系統和渲染硬件之間的可用帶寬。但是,如果您開始使用VBO機制來傳輸數據,那麼大多數傳統功能就變得毫無用處。

也就是說,除了需要支持舊的應用程序,這是一個足夠的理由爲相容性分佈,我覺得這個API仍然是學習的目的。

至於你的主要問題,以上只適用於完整的OpenGL版本,而不是ES版本,它不支持舊的原語,在這種情況下,仿真層是必要的。