2016-08-04 83 views
0

舊的固定管道OpenGL編程大量使用了矩陣堆棧原理。現代OpenGL:我應該使用自定義矩陣堆棧嗎?

隨着靈活的着色器,我現在可以自由創建和使用我自己的矩陣,因爲我喜歡。我讀過的教程似乎不再使用任何類型的矩陣堆棧,而只是根據需要保存和應用必要的矩陣。

其他像this one似乎對其所有矩陣都使用矩陣堆棧庫(請參閱鏈接章節中的示例代碼)。

我的問題是:這是純粹的任意偏好,還是現代圖形編程首選或其他方式?

+0

不使用堆棧是首選。在覈心配置文件中沒有堆棧,我強烈建議您爲新項目使用核心配置文件。將模型矩陣與對象一起存儲,並與觀看矩陣和投影矩陣一起傳遞給着色器。堆棧在那裏,所以層次調用更容易執行。 – Mars

+0

@Mars我正在使用核心配置文件,所以我絕對不會使用OpenGL堆棧。但有些教程使用自己的堆棧或std :: stack或類似的東西,其他人似乎沒有使用堆棧,只是將矩陣保存在適當的類/對象中。您是否建議不要使用堆棧進行「正常」繪製,並在需要層次結構時使用自己的堆棧實現或庫(例如關節等)? – jhyot

+1

TL; DR:是的。 但它主要取決於你發現哪種方法更「自然」,更舒適。有人可能會受舊流水線的影響,不能處理沒有堆疊的矩陣,因此必須實現自己的矩陣。另一個人在堆棧中看不到任何有價值的東西。我幾乎是後者。使用了一些2.x OpenGL,然後切換到3.x.起初我實現了自己的堆棧,但後來發現它不適合用於可編程着色器的通用用途。我遠不是專業的OpenGL開發者,只是在我的(短暫的)生活中使用了一些代碼。 – Mars

回答

1

如何生成矩陣數據或多或少不相關。在非常高性能的場景中,一種解決方案可能比另一種解決方案更受歡迎,但它最終會非常引擎特定。

如果您想使用C++堆棧來創建對象的層次結構,那就這樣吧。如果你想有一個明確的堆棧矩陣,你可以隨意推/拉,就可以了。如果你想完全做其他事情,那取決於你。

沒有正確的答案;只有最適合你和你的代碼的是什麼。

+0

感謝您的回答!你知道任何推薦的做法嗎?我對OpenGL很陌生,所以我不會真正知道「最適合我的東西」。由於我正在編寫全新的代碼,因此我可以自由選擇任何方法。但是,如果人們普遍認爲在大多數情況下是最好的方式,那麼我只想使用這個方法,而不是嘗試所有的方法,並且在5年後更加明智。 – jhyot

相關問題