WTF
OpenGL 是一種應用程序編程接口(Application Programming Interface, API),它是一種可以對圖形硬件設備特性進行訪問的軟件庫。OpenGL 被設計為一個現(xiàn)代化的人断、硬件無關的接口蚁署,因此我們可以在不考慮計算機操作系統(tǒng)或窗口系統(tǒng)的前提下绣版,在多種不同的圖形硬件系統(tǒng)上鲤拿,或者完全通過軟件的方式(如 果當前系統(tǒng)沒有圖形硬件)實現(xiàn) OpenGL 的接口辐脖。OpenGL 自身并不包含任何執(zhí)行窗口任務 或者處理用戶輸入的函數(shù)。
一個用來渲染圖像的 OpenGL 程序需要執(zhí)行的主要操作如下所示皆愉。
- 從 OpenGL 的幾何圖元中設置數(shù)據(jù),用于構(gòu)建形狀。
- 使用不同的著色器(shader)對輸入的圖元數(shù)據(jù)執(zhí)行計算操作幕庐,判斷它們的位置久锥、顏色,以及其他渲染屬性异剥。
- 將輸入圖元的數(shù)學描述轉(zhuǎn)換為與屏幕位置對應的像素片元(fragment)瑟由。這一步也稱作光柵化(rasterization)。
- 最后冤寿,針對光柵化過程產(chǎn)生的每個片元歹苦,執(zhí)行片元著色器(fragment shader),從而決定這個片元的最終顏色和位置督怜。
- 如果有必要殴瘦,還需要對每個片元執(zhí)行一些額外的操作,例如判斷片元對應的對象是否可見号杠,或者將片元的顏色與當前屏幕位置的顏色進行融合蚪腋。
OpenGL 是使用客戶端 - 服務端的形式實現(xiàn)的,我們編寫的應用程序可以看做客戶端姨蟋,而計算機圖形硬件廠商所提供的 OpenGL 實現(xiàn)可以看做服務端屉凯。
Begining
環(huán)境搭建 參考這篇
渲染流程如下圖
其中常用的是頂點著色器(決定位置)和片元著色器(決定片元的存在與顏色)
說說坐標
對了這時候需要補充一下坐標的概念, OpenGL是右手坐標系眼溶,默認以屏幕的中心為遠點(0,0,0)悠砚, 往右為x正方向,往上為y正方向堂飞,垂直于屏幕向外為z正方向灌旧,坐標中每個點的范圍為[-1 ,1]
伸出右手酝静,手心面對自己节榜,中指指向自己,則拇指指向x+别智,食指指向y+宗苍,中指指向z+。
有了坐標的概念薄榛,就可以先搞個簡單的圖形了
/// 頂點數(shù)據(jù)
GLfloat vVerts[] = {
-0.5f, 0.0f, 0.0f, // 依次表示x,y,z的坐標值
0.5f, 0.0f, 0.0f,
0.0f, 0.5f, 0.0f
};
這是個簡單三角形讳窟,然而復雜的圖形也都是一個個坐標拼出來的。具體的著色器如何渲染圖形敞恋,會放到另一篇文章來分析丽啡。
看到這里,我們便可以畫一些簡單的圖形了硬猫。