當前位置:編程學習大全網 - 源碼下載 - OpenGL簡介

OpenGL簡介

上壹節已經搭建好了開發環境,在正式學習如何用OpenGL前,我們先了解壹下OpenGL的基礎知識。

壹、OpenGL是什麽

壹般它被認為是壹個API,包含了壹系列的函數,用來操作各種圖形圖像。事實上並不是,OpenGL僅僅是壹個由壹個名為Khronos組織制定並維護的規範。但是,我寧願把它當成是API來理解,因為規範嚴格規定了OpenGL各函數的輸入和輸出,內部細節都是開發者自行決定。那麽以API來理解,我認為是很合理的。(其實OpenGL函數大多是各顯卡廠商開發的,所以如果妳在用OpenGL開發過程中如果遇到問題,可以嘗試更新顯卡驅動的方式來解決,當然,前提是妳還要確定壹下顯卡廠商)

如果妳想了解OpenGL規範細節,可以訪問https://www.opengl.org/registry/doc/glspec33.core.20100311.withchanges.pdf。

二、狀態機

OpenGL是壹個狀態機,無論是官方信息還是網絡上的信息,都解釋的比較繁瑣和復雜。

我認為,可以這麽理解,當我們用OpenGL去繪制壹個三角形時,要把OpenGL當前狀態設置成可以繪制三角形的狀態,比如顏色、線條啥的,渲染就出來三角形了。如果又想繪制線段了,就把OpenGL當前狀態再設置成線段的狀態,就可以渲染出線段了。

說白了,就是想繪制啥,就把狀態設置先設置成啥,這就是狀態機。(這是我自己理解的,哈哈)

三、核心模式與立即渲染模式

OpenGL3.2之前,它都是立即渲染模式,3.2之後,它使用了核心模式,拋棄了立即渲染模式。

那麽什麽是立即渲染模式,什麽是核心模式呢?

我查了網上很多資料,都沒有把這個事情說清楚,我通過各種文章,是這麽理解的:

立即渲染模式是類似這樣:

glBegin( GL_TRIANGLES );

glVertex3f(-1.0f, -0.5f, -4.0f);

glVertex3f( 1.0f, -0.5f, -4.0f);

glVertex3f( 0.0f, 0.5f, -4.0f);

glEnd();

上面是繪制三角形的,具體可以不用追究。只要明白,設置好點,放在glBegin和glEnd之間,就能渲染出來三角形了。這就是立即渲染模式。

而核心模式就要關註細節了,它是如何用點和顏色渲染圖形的,都需要開發者參與設計。

暫時我就理解到這個程度,後續邊學邊理解吧。

四、對象

OpenGL庫是用C語言寫的,我們知道C語言是面向過程的,之前的OpenGL也是面向過程的,比如,繪制壹個圖形,就要設置好頂點和顏色,如果再繪制壹個,就要再設置壹次。而OpenGL引入“對象(Object)”後,就方便多了。比如:

// 創建對象

unsigned int objectId = 0;

glGenObject(1, &objectId);

// 綁定對象至上下文

glBindObject(GL_WINDOW_TARGET, objectId);

// 設置當前綁定到 GL_WINDOW_TARGET 的對象的壹些選項

glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_WIDTH, 800);

glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_HEIGHT, 600);

// 將上下文對象設回默認

glBindObject(GL_WINDOW_TARGET, 0);

上面這段是在網上抄過來的,不過,說明很詳細,我們首先創建壹個對象,然後用壹個id保存它的引用(實際數據被儲存在後臺)。然後我們將對象綁定至上下文(就是設置內容,比如顏色、大小等等)的目標位置(例子中窗口對象目標的位置被定義成GL_WINDOW_TARGET)。接下來我們設置窗口的選項。最後我們將目標位置的對象id設回0,解綁這個對象。設置的選項將被保存在objectId所引用的對象中,壹旦我們重新綁定這個對象到GL_WINDOW_TARGET位置,這些選項就會重新生效。

說白了,就是,創建壹個對象,先用壹個ID保存起來,並設置好內容,想用了,將這個ID跟設置目標(比如GL_WINDOW_TARGET)綁定,就可以用了,不用每次都重新設置。

好了,這次了解了壹些OpenGL的基礎,下壹次就可以開心正式學習OpenGL了。

  • 上一篇:樹葉png圖片-ps水資源環保海報教程_ps設計節約用水的環保主題海報
  • 下一篇:有哪些大盤狀態指標技巧
  • copyright 2024編程學習大全網