我在閱讀OpenGL Superbible第五版,他們討論了通過自己的班級使用堆棧。這非常棒,但他們提到矩陣堆棧已被棄用。爲什麼他們被棄用,人們用什麼來代替他們?OpenGL - 爲什麼移除了矩陣堆棧,現在人們在使用什麼?
回答
矩陣堆棧(以及矩陣函數的其餘部分)僅在覈心配置文件中被棄用。在兼容性配置文件中,您仍然可以使用它們。
從我的角度來看,它被刪除了,因爲大多數引擎/框架都有自定義數學代碼和着色器統一樣式,用於向着色器發送矩陣。
雖然對於簡單的程序/教程來說,使用和搜索別的東西非常不方便。
我建議使用:
- GLM(http://glm.g-truc.net/)
- 非常簡單的數學LIB(vsml)
那麼第一和主要原因,對我來說,是與崛起可編程着色器(在第三版的opengl之後是強制性的),所有自動轉移到着色器的變量(如GL_PROJECTION和GL_MODELVIEW)都將從着色器中刪除,因此用戶必須定義自己的矩陣以在着色器中使用它。由於您必須使用統一函數手動發送矩陣,因此您不再需要固定變量。
他們爲什麼不贊成
因爲沒有人真正在現實世界中OpenGL程序中使用它。以物理模擬爲例:您將所有的物體位置作爲4×4矩陣存儲在物理系統中。所以你只是用它。可見物體確定和動畫系統也一樣。所有這些都需要實現矩陣運算,所以在OpenGL中這樣做是相當多的,因爲大部分時間已經存在的矩陣都被簡單地放入了glLoadMatrix
。
人們用什麼來代替他們?
他們以前使用的是什麼:他們的動畫系統,物理仿真器,場景圖等
的原因(S)是政治性的,而不是技術,並可以追溯到21世紀初。
OpenGL 3是有史以來第一個願意打破向後兼容性的版本。設計人員希望爲專家用戶,遊戲程序員和高端可視化編碼人員創建一個API,他們知道有關着色器的所有信息,並編寫自己的矩陣代碼。目的是OpenGL 3 API應該與實際的硬件相當匹配。 (即使在OpenGL1/2中,矩陣堆棧通常在CPU側實現,而不是在GPU上實現。)
從遊戲引擎程序員的角度來看,這是更好的。而且,嘿,如果你每隔幾年就必須開發一款新的遊戲引擎,那麼拋棄舊代碼有什麼大不了的?
該設計過程的結果是OpenGL 3/4內核配置文件。
一旦宣佈「新一代」OpenGL,大學和公司的所有不那麼專業的編碼人員都會意識到他們會被搞砸。這些人(像我一樣)教授3D圖形或編寫用於研究或設計的實用程序。我們不需要比普通的環境漫反射鏡更高級的照明。我們經常需要將來自不同來源的代碼混合在一起,而且如果每個人都使用完全相同的矩陣,光照和紋理約定(如OpenGL 2提供的那些代碼),那麼這很容易。
另外,我聽說過但不能驗證,大型CAD/CAM公司意識到他們也會被搞砸。當您付費時(以及高收入:比較Quadro與GeForce或FireGL與Radeon的價格比較),客戶從十年的開發中扔掉兩百萬行代碼並不是一種選擇。
因此NVIDIA和ATI都宣稱他們會盡可能長時間地支持舊API。
此壓力的結果是兼容性配置文件。 OpenGL ARB現在似乎已經意識到,雖然他們希望每個人都切換到核心配置文件,但它不會發生:請閱讀OpenGL 4中鑲嵌細化着色器的擴展規範,並提及GL_PATCHES將與glBegin一起使用。
謝謝。政治在軟件發行和開發方面的作用太糟糕了。 – 2012-07-18 23:54:29
- 1. 如果我溢出OpenGL矩陣堆棧會發生什麼?
- 2. 什麼是堆棧用於?他們爲什麼使用C++?
- 3. 矩陣堆棧的openGL
- 4. OpenGL的矩陣堆棧
- 5. 爲什麼我們在Java中使用堆棧和隊列?
- 6. 爲什麼我需要在OpenGL中使用TBN矩陣?
- 7. 爲什麼我的矩陣返回堆棧溢出?
- 8. 爲什麼我們要在堆棧和堆上管理結構
- 9. 堆棧爲空...爲什麼?
- 10. 什麼在堆棧中?
- 11. OpenGL中的矩陣堆棧棄用?
- 12. 現代OpenGL:我應該使用自定義矩陣堆棧嗎?
- 13. 爲什麼堆棧溢出?
- 14. 爲什麼堆棧有界?
- 15. 爲什麼堆棧炸燬
- 16. 什麼是Node.js分離?他們爲什麼現在死了?
- 17. PyPy 1.7爲什麼不實現「無堆棧」堆棧?
- 18. 爲什麼在堆棧中零片段
- 19. 爲什麼指針不在堆棧上?
- 20. C++中的堆棧。他們爲什麼以及何時使用?
- 21. 爲什麼要使用堆棧?爲什麼不只是堆? - C/C++
- 22. opengl發生了什麼?現在是什麼樣的噩夢?
- 23. OpenGL:將單應矩陣轉換應用於矩陣堆棧
- 24. 的OpenGL:矩陣堆棧的功能
- 25. 堆棧中的push和pop矩陣(openGL)
- 26. (OpenGL)將「舊」矩陣推入堆棧
- 27. 線程堆棧上存儲了什麼?
- 28. 爲什麼在OpenGL中顯式管理矩陣更好?
- 29. 什麼是monotouch-glue,爲什麼它出現在Xamarin堆棧軌跡中?
- 30. 什麼是DRAM堆棧(遞歸期間發生了什麼)?
我會推薦[Eigen](http://eigen.tuxfamily.org/)。 – Arpegius 2012-07-17 13:02:48
我扔在我的linmath.h https://github.com/datenwolf/linmath.h – datenwolf 2012-07-17 23:43:46