Opengl的核心模式与立即渲染模式
立即渲染模式
早期的OpenGL使用立即渲染模式(Immediate mode,也就是固定渲染管線),這個模式下繪制圖形很方便。
OpenGL的大多數功能都被庫隱藏起來,開發者很少有控制OpenGL如何進行計算的自由。而開發者迫切希望能有更多的靈活性。隨著時間推移,規范越來越靈活,開發者對繪圖細節有了更多的掌控。
核心模式
立即渲染模式確實容易使用和理解,但是效率太低。因此從OpenGL3.2開始,規范文檔開始廢棄立即渲染模式,并鼓勵開發者在OpenGL的核心模式(Core-profile)下進行開發,這個分支的規范完全移除了舊的特性。
當使用OpenGL的核心模式時,OpenGL迫使我們使用現代的函數。當我們試圖使用一個已廢棄的函數時,OpenGL會拋出一個錯誤并終止繪圖。現代函數的優勢是更高的靈活性和效率,然而也更難于學習。立即渲染模式從OpenGL實際運作中抽象掉了很多細節,因此它在易于學習的同時,也很難讓人去把握OpenGL具體是如何運作的?,F代函數要求使用者真正理解OpenGL和圖形編程,它有一些難度,然而提供了更多的靈活性,更高的效率,更重要的是可以更深入的理解圖形編程。
這也是為什么我們的教程面向OpenGL3.3的核心模式。雖然上手更困難,但這份努力是值得的。
最新版本opengl
現今,更高版本的OpenGL已經發布(寫作時最新版本為4.5),你可能會問:既然OpenGL 4.5 都出來了,為什么我們還要學習OpenGL 3.3?答案很簡單,所有OpenGL的更高的版本都是在3.3的基礎上,引入了額外的功能,并沒有改動核心架構。新版本只是引入了一些更有效率或更有用的方式去完成同樣的功能。因此,所有的概念和技術在現代OpenGL版本里都保持一致。當你的經驗足夠,你可以輕松使用來自更高版本OpenGL的新特性。
opengl的擴展
OpenGL的一大特性就是對擴展(Extension)的支持,當一個顯卡公司提出一個新特性或者渲染上的大優化,通常會以擴展的方式在驅動中實現。如果一個程序在支持這個擴展的顯卡上運行,開發者可以使用這個擴展提供的一些更先進更有效的圖形功能。通過這種方式,開發者不必等待一個新的OpenGL規范面世,就可以使用這些新的渲染特性了,只需要簡單地檢查一下顯卡是否支持此擴展。通常,當一個擴展非常流行或者非常有用的時候,它將最終成為未來的OpenGL規范的一部分。
opengl狀態機
OpenGL自身是一個巨大的狀態機(State Machine):一系列的變量描述OpenGL此刻應當如何運行。OpenGL的狀態通常被稱為OpenGL上下文(Context)。我們通常使用如下途徑去更改OpenGL狀態:設置選項,操作緩沖。最后,我們使用當前OpenGL上下文來渲染。
假設當我們想告訴OpenGL去畫線段而不是三角形的時候,我們通過改變一些上下文變量來改變OpenGL狀態,從而告訴OpenGL如何去繪圖。一旦我們改變了OpenGL的狀態為繪制線段,下一個繪制命令就會畫出線段而不是三角形。
當使用OpenGL的時候,我們會遇到一些狀態設置函數(State-changing Function),這類函數將會改變上下文。以及狀態使用函數(State-using Function),這類函數會根據當前OpenGL的狀態執行一些操作。只要你記住OpenGL本質上是個大狀態機,就能更容易理解它的大部分特性。
opengl對象
OpenGL庫是用C語言寫的,同時也支持多種語言的派生,但其內核仍是一個C庫。由于C的一些語言結構不易被翻譯到其它的高級語言,因此OpenGL開發的時候引入了一些抽象層。“對象(Object)”就是其中一個。
在OpenGL中一個對象是指一些選項的集合,它代表OpenGL狀態的一個子集。比如,我們可以用一個對象來代表繪圖窗口的設置,之后我們就可以設置它的大小、支持的顏色位數等等??梢园褜ο罂醋鲆粋€C風格的結構體(Struct):
文字參考:https://learnopengl-cn.github.io/01%20Getting%20started/01%20OpenGL/
另外推薦教程:https://www.bootwiki.com/opengl/opengl-tutorial1.html
總結
以上是生活随笔為你收集整理的Opengl的核心模式与立即渲染模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenPLC--可编程控制器的发展趋势
- 下一篇: 浅谈限流式保护器在商场电气火灾防范中的应