我目前正在掌握OpenGL。我從GLUT開始,但決定「畢業」到SFML庫。 SFML實際上比GLUT提供更少的GL實用程序,但是可移植且提供了一些其他功能。所以這只是我,GL和GLU。是的,我是一個懲罰的騙子。管理OpenGL狀態機的策略
我想請教一下,人有管理的東西,如矩陣的變化,顏色變化,材質的變化等
目前,我從一個單獨的線程渲染下一個「裸對象」的設計理念策略。即。每個圖形對象都有一個可以完成繪圖工作的函數。這些對象本身可能是其他對象的集合,也可能是圖形基元的集合。當一個特定的Render()
被調用時,它沒有關於在它之前調用過什麼變換/材料變化的信息(當然是好事)。
隨着事態已經發展我有一定的策略,如使每一個功能的承諾,推動再彈出的矩陣,如果他們進行任何轉換解決。對於其他設置,我在調用glBegin()
之前明確地設置了需要設置的任何內容,並且沒有理所當然。當一個渲染函數對不太常見的狀態變量進行一些更改時,問題就會出現,並且我開始考慮使用一些RAII來強制執行對作用域中所做的所有狀態更改的逆轉。使用OpenGL有時會提醒我很多彙編編程。我發現我實際上正在開發自己的openGL封裝器,所以我認爲很有必要了解其他人使用的策略,或者關於這些策略的想法和注意事項。學科。或者,也許是時候切換到像場景圖庫這樣的東西了?
更新:13/5/11
現在已經調查過與頂點/正常/彩色陣列和VBO的我已決定將所有實際openGL的通信到一個單獨的模塊渲染。渲染過程將包括從我的對象中獲取大量GL獨立空間/材質數據,然後以可解釋的格式將所有這些信息傳遞給openGL。這意味着所有原始數組處理和狀態操作將被合併到一個區域中。它增加了一個額外的間接,和一點點計算開銷的呈現過程,但它意味着我可以用一個單一的VBO /陣列爲我所有的數據,然後每幀傳送,一次就全部,一旦openGL的。
這是一個很好的問題,你也可能對http://gamedev.stackexchange.com/感興趣。至於你的問題,它超越了我,但是讓我想回到遊戲編碼。祝你好運 – 2011-05-12 04:11:08