2012-07-17 63 views

回答

2

矩陣堆棧(以及矩陣函數的其餘部分)僅在覈心配置文件中被棄用。在兼容性配置文件中,您仍然可以使用它們。

從我的角度來看,它被刪除了,因爲大多數引擎/框架都有自定義數學代碼和着色器統一樣式,用於向着色器發送矩陣。

雖然對於簡單的程序/教程來說,使用和搜索別的東西非常不方便。

我建議使用:

+0

我會推薦[Eigen](http://eigen.tuxfamily.org/)。 – Arpegius 2012-07-17 13:02:48

+2

我扔在我的linmath.h https://github.com/datenwolf/linmath.h – datenwolf 2012-07-17 23:43:46

1

那麼第一和主要原因,對我來說,是與崛起可編程着色器(在第三版的opengl之後是強制性的),所有自動轉移到着色器的變量(如GL_PROJECTION和GL_MODELVIEW)都將從着色器中刪除,因此用戶必須定義​​自己的矩陣以在着色器中使用它。由於您必須使用統一函數手動發送矩陣,因此您不再需要固定變量。

2

他們爲什麼不贊成

因爲沒有人真正在現實世界中OpenGL程序中使用它。以物理模擬爲例:您將所有的物體位置作爲4×4矩陣存儲在物理系統中。所以你只是用它。可見物體確定和動畫系統也一樣。所有這些都需要實現矩陣運算,所以在OpenGL中這樣做是相當多的,因爲大部分時間已經存在的矩陣都被簡單地放入了glLoadMatrix

人們用什麼來代替他們?

他們以前使用的是什麼:他們的動畫系統,物理仿真器,場景圖等

9

的原因(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一起使用。

+0

謝謝。政治在軟件發行和開發方面的作用太糟糕了。 – 2012-07-18 23:54:29